有时我的SSH客户端将永远login。
发生这种情况时,服务器没有响应(过载,死亡处理,…)。 我的自动脚本将会失败,因为ssh进程永远不会退出。
有一个sshconfiguration值来设置超时,如果ssh无法login预定的秒数之后失败?
我知道在服务器端有旋钮,但是我必须在客户端设置它,因为sshd进程没有响应,或者响应不正确。
谢谢!
我曾经见过即使设置ConnectTimeout也不行的情况。 当使用大量服务器的自动ssh连接时,这可能会特别恼人。 我的解决scheme是在客户端使用封装,如果不能连接并且返回速度够快,就会导致ssh进程死亡。 像这样(perl):
$SshCmd = "ssh server.example.com uname -a"; $TimeOut = 120; eval { local $SIG{ALRM} = sub { # ignore SIGHUP here so the kill only affects children. local $SIG{HUP} = 'IGNORE'; kill 1,(-$$); print STDERR "ssh terminated, max run time of $TimeOut seconds exceeded.\n"; }; alarm $TimeOut; system ($SshCmd) || die "failed to run $SshCmd: $!"; alarm 0; }; $SIG{HUP} = 'DEFAULT';
这会设置$TimeOut秒的警报,如果超过了警报,则会$TimeOut子$TimeOut (ssh命令)。
我有同样的问题,并使用Linux的“超时”杀死悬挂SCP会议。
timeout -s 9 1h command command_arguments
如果命令超过一个小时,将发送kill -9。
仅供参考ConnectTimeout选项不适合我。
如果使用ssh(来自OpenSSH),请在.ssh / config中设置“ConnectTimeout”。
ConnectTimeout
指定连接到ssh服务器时使用的超时(以秒为单位),而不是使用默认的系统TCP超时。 该值仅在目标处于closures状态或真正无法访问时使用,而不是在拒绝连接时使用。
尝试在sshd_config中设置“UseDNS no”。