如果在中间被打断,ssh会挂起

时间:2015-09-18 06:01:52

标签: linux shell ssh

以下代码假设如果ssh能够连接到远程机器,则重复打印“已连接”,否则将打印“未连接”。

#!/bin/bash
while [ "1" ]
do
    ifconfig usb0 &>/dev/null
    if [ "$(echo $?)" == "0" ]
    then
        sshpass -p passwd ssh -o ConnectTimeout=5 duser@10.1.1.3 sudo echo "connected"
    else
        echo "not-connected"
    fi
    sleep 0.2
done

远程机器通过usb0接口连接。我正在通过频繁拔出和插入usb接口来测试这个脚本。问题是有时当我拔掉usb接口时,代码卡在ssh并且不会重复打印。我想如果ssh在执行过程中被中断,它就会卡住。我怎么能克服这个?有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

显然,它根本没有悬挂。 但是你打印连接的方式似乎是错误的。

这看起来非常可疑

sshpass -p passwd ssh -o ConnectTimeout=5 duser@10.1.1.3 sudo grep "connected"

你想要什么?

通常情况下,如果您需要grep某个应用程序的输出,您需要通过管道进行操作,例如

ls | grep "connected"

答案 1 :(得分:0)

由于您使用的是bash,因此这是一种更好的测试方式:

2>/dev/null >/dev/tcp/<ip_addr>/<port> && echo pass || echo fail

有关详细信息,请参阅redirections上的Bash文档。