我已经制作了expect / bash脚本来检索cisco设备配置;它是简单的复制cisco running-configuration并使用tftp保存它。
#!/bin/bash
while read line;
do
device=$line;
expect << EOF
spawn telnet $device
expect "Username:"
send "username\n"
expect "Password:"
send "password\n"
send "copy running-config tftp://192.168.244.14\r"
expect "Address or name of remote host"
send "\r"
expect "Destination filename "
send "\r"
expect "secs"
send "exit\r"
close
EOF
done < /home/marco/Scrivania/Host.txt
exit 0
我的问题是我有几个设备,一些配置为接受telnet连接,另一个只接受ssh连接。所以,在我的脚本中,我会添加如下内容:
尝试使用telnet连接到设备 如果3分钟后没有响应,取消'spawn telnet ...'命令并尝试使用ssh连接。
以女巫的方式我可以实现这个吗?
答案 0 :(得分:-1)
这不是正确的方法,真的。你有两个单独的列表要好得多:一个用于telnet,一个用于ssh。从长远来看,这只会让事情变得简单。
如果你真的开始让连接挂起并暂停,你当然可以这样做。只需设置一个超时值(以秒为单位),如果超时超时,则需要采取的操作。
例如:
spawn telnet $device
expect -timeout 180 {
"Username:" {send "username\r\n"; sleep 1; send "password\r\n"}
timeout { your_ssh_actions_or_proc }