如何在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