“ssh root @ server”永远挂起

有时我的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”。