【问题标题】:script ssh to multiple IPs and fetch config脚本 ssh 到多个 IP 并获取配置
【发布时间】:2016-07-22 03:00:42
【问题描述】:

我有一个任务,我必须通过 ssh 连接到大约 500 个远程系统并拉取正在运行的配置。我只能使用密码验证。我创建了一个将登录并运行命令的期望脚本。该脚本已设置为以便我可以将 IP 地址作为参数传递给脚本。我的期望脚本如下所示:

#!/usr/bin/expect -f

set ipaddress [lindex $argv 0]  
spawn ssh user@$ipaddress
expect "user@$ipaddress's password:"
send "passowrd\r"
set prompt {\$ $}
expect -re $prompt
send "show running-config\r"
expect -re $prompt
send "quit\r"
interact

我从远程主机复制运行配置的方式是调用脚本并将其重定向到本地系统上的文件。

./expect_script $IPADDRESS > file

这很好用,但我需要自动化为这个脚本提供 IP 列表并让它继续运行直到完成的过程。我正在寻找有关设置 for 循环的指导。到目前为止,我认为这可以让我浏览 IP 列表:

#!/bin/bash

hosts=$(cat iplist)

for hosts in "$hosts"; do /root/expect_script "$hosts"
done

问题是我不知道如何让循环也为每个拉出的主机配置创建一个新的输出文件。我所做的是将主机文件设置为如下所示:

  192.168.100.5 > file1
  192.168.101.6 > file2

我想如果我将重定向放入文件中它会起作用。然而事实并非如此。该循环通过 ssh 连接到系统并运行命令,但它不会保存到 file1、file2 等。

是否可以设置循环以某种方式为其运行的每个主机创建一个新文件?

【问题讨论】:

    标签: bash for-loop ssh


    【解决方案1】:

    我想这就是你要找的东西

    #!/bin/bash
    
    hosts=$(< iplist)
    
    for h in $hosts; do /root/expect_script "$h" > "${h}.txt"
    done
    

    【讨论】:

    • 或者考虑读入数组hosts,(例如hosts=( $(&lt;iplist)),然后for h in "${hosts[@]}"; do ...(是的,因为没有空格,两者都可以)
    猜你喜欢
    • 2021-04-21
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多