如何在生成ssh或telnet连接时处理超时?

时间:2012-06-12 16:03:06

标签: expect cisco-ios

我已经制作了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连接。

以女巫的方式我可以实现这个吗?

1 个答案:

答案 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 }