如何在脚本中使用超时ssh?

时间:2011-02-08 18:25:38

标签: shell ssh timeout

我正在远程主机上执行通过无密码SSH连接的脚本。我想设置一个超时,这样如果远程主机花了无限的时间来运行,我想退出那个ssh会话并继续我的sh脚本中的其他行。

关于如何做的任何想法?

6 个答案:

答案 0 :(得分:239)

ssh -o ConnectTimeout=10  <hostName>

其中10是以秒为单位的时间。

答案 1 :(得分:98)

使用-o ConnectTimeout-o BatchMode=yes -o StrictHostKeyChecking=no

ConnectTimeout 可防止脚本挂起, BatchMode 可防止主机未知,YES添加到known_hosts, StrictHostKeyChecking 添加指纹自动。

****注**** “StrictHostKeyChecking”仅适用于您信任主机的内部网络。根据SSH客户端的版本,“您确定要添加指纹”会导致客户端无限期挂起(主要是在AIX上运行的旧版本)。大多数现代版本都没有遇到这个问题。如果你必须处理多个主机的指纹,我建议使用某种配置管理工具维护known_hosts文件,如puppet / ansible / chef / salt /等。

答案 2 :(得分:40)

试试这个:

timeout 5 ssh user@ip

timeout执行ssh命令(带args),如果ssh在5秒后没有返回,则发送SIGTERM。 有关超时的更多详细信息,请阅读本文档: http://man7.org/linux/man-pages/man1/timeout.1.html

或者您可以使用ssh:

的参数
ssh -o ConnectTimeout=3 user@ip

答案 3 :(得分:14)

你也可以用旗帜连接

-o ServerAliveInterval=<secs>
所以SSH客户端每隔<secs>秒就会向服务器发送一个空包,只是为了保持连接活着。 在Linux中,也可以/etc/ssh/ssh_config中的~/.ssh/config或{{1}}中的每个用户进行全局设置。

答案 4 :(得分:0)

好吧,你可以使用nohup来运行你在'非阻塞模式'上运行的任何东西。所以你可以继续检查是否应该运行,运行,否则退出。

nohup ./my-script-that-may-take-long-to-finish.sh &
./check-if-previous-script-ran-or-exit.sh

echo "Script ended on Feb 15, 2011, 9:20AM" > /tmp/done.txt

所以在第二个中你只是检查文件是否存在。

答案 5 :(得分:0)

如果其他所有方法均失败(包括没有使用AvroConsumer命令),则此shell脚本中的概念将起作用:

timeout