脚本ssh到多个IP并获取配置

时间:2016-07-22 03:00:43

标签: bash for-loop ssh

我有一项任务,我必须在大约500个远程系统中运行并拉出正在运行的配置。我只能使用密码验证。我创建了一个将要登录并运行命令的expect脚本。该脚本设置为我可以将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等。

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

1 个答案:

答案 0 :(得分:1)

我认为这就是你要找的东西

#!/bin/bash

hosts=$(< iplist)

for h in $hosts; do /root/expect_script "$h" > "${h}.txt"
done