【发布时间】:2017-10-16 23:23:19
【问题描述】:
我有一个 IP 列表,我正在循环通过 ssh 进入每个 IP 并捕获一些日志。目前,它将遍历所有 IP 并执行我想要的操作,当它到达最后一个 IP 时会出现问题,在完成最后一行后,它会尝试生成另一个空行,从而导致错误。 (spawn ssh root@)
如何防止此错误发生?
我的期望.sh
set user user
set pass pass
set timeout 600
# Get the list of hosts, one per line #####
set f [open "/my/ip/list.txt"]
set hosts [split [read $f] "\n"]
close $f
# Iterate over the hosts
foreach host $hosts {
spawn ssh $user@$host
expect {
"connecting (yes/no)? " {send "yes\r"; exp_continue}
"assword: " {send "$pass\r"}
}
expect "# "
send "myscript.sh -x\r"
expect "# "
send "exit\r"
expect eof
}
myiplist.txt
172.17.255.255
172.17.255.254
...
错误:
[root@172.17.255.255: ]# exit //last ip in the list
Connection to 172.17.255.255 closed.
spawn ssh root@
ssh: Could not resolve hostname : Name or service not known
expect: spawn id exp5 not open
【问题讨论】:
-
我认为这里已经回答了这个问题:stackoverflow.com/questions/4165135/…
-
此外,我通常认为使用
expect + ssh是一种痛苦。您可能想尝试像 Ansible 这样的工具 - 它会让您的生活更轻松。