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

问题描述 投票:1回答:1

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

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

expect cisco-ios
1个回答
-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 }
© www.soinside.com 2019 - 2024. All rights reserved.