【发布时间】: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 等。
是否可以设置循环以某种方式为其运行的每个主机创建一个新文件?
【问题讨论】: