如何在shell脚本中设置SSH超时

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

任何想法如何做到这一点?

ssh -o ConnectTimeout=10 <hostName> 

10秒钟的时间。

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

ConnectTimeout使脚本免于挂起, BatchMode使其不与挂起的主机未知,是添加到known_hosts, StrictHostKeyChecking自动添加指纹。

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

尝试这个:

 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 

你也可以连接标志

  -o ServerAliveInterval = <secs> 

所以SSH客户端会每隔<secs>秒向服务器发送一个空数据包,以保持连接的活跃。 在Linux中,也可以在~/.ssh/config中的/etc/ssh/ssh_config或per-user全局设置。

那么,你可以使用nohup来运行你在“非阻塞模式”下运行的任何东西。 所以你可以继续检查是否应该运行,运行,否则退出。

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

回声“脚本结束于2011年2月15日,9:20”> /tmp/done.txt

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

怎么样在循环中使用这个命令

 set timeout -1