“ssh root @ server”永远挂起

前端之家收集整理的这篇文章主要介绍了“ssh root @ server”永远挂起前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有时我的ssh客户端将永远登录.

当服务器没有响应(重载,终止处理,……)时会发生这种情况.我的自动脚本将失败,因为ssh进程永远不会退出.

如果ssh在预定义的秒数后无法登录,是否有ssh配置值来设置超时以便失败?

我知道服务器端有旋钮,但我必须在客户端设置这个,因为sshd进程没有响应或响应不正确.

谢谢!

解决方法

我见过甚至设置ConnectTimeout都不起作用的情况.当使用自动ssh连接到大量服务器时,这可能会特别烦人.我的解决方案是在客户端使用一个包装程序,如果它没有连接并足够快地返回,则会终止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秒的警报,并在超过警报时杀死子节点(ssh命令).

猜你在找的Linux相关文章