【问题标题】:How can I handle timeouts when spawning ssh or telnet connections?生成 ssh 或 telnet 连接时如何处理超时?
【发布时间】:2023-10-04 15:19:01
【问题描述】:

我制作了一个期望/bash 脚本来检索 cisco 设备配置;这是简单的复制cisco运行配置并使用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】:

    这不是解决这个问题的正确方法,真的。最好有两个单独的列表:一个用于 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 }
    

    【讨论】: