加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

“ssh root @ server”永远挂起

发布时间:2020-12-14 02:34:52 所属栏目:Linux 来源:网络整理
导读:有时我的ssh客户端将永远登录. 当服务器没有响应(重载,终止处理,……)时会发生这种情况.我的自动脚本将失败,因为ssh进程永远不会退出. 如果ssh在预定义的秒数后无法登录,是否有ssh配置值来设置超时以便失败? 我知道服务器端有旋钮,但我必须在客户端设置这个
有时我的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命令).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读