有时我的 ssh 客户端会花费很长时间才能登录。
当服务器没有响应(过载、已终止处理等)时会发生这种情况。我的自动化脚本将失败,因为 ssh 进程永远不会退出。
如果 ssh 在预定义的秒数后无法登录,是否有 ssh 配置值来设置超时以失败?
我知道服务器端有旋钮,但我必须在客户端设置它,因为 sshd 进程没有响应,或者响应不正确。
谢谢!
我见过即使设置 ConnectTimeout 也不起作用的情况。当使用自动 ssh 连接到大量服务器时,这可能特别烦人。我的解决方案是在客户端使用一个包装器,如果 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';
Run Code Online (Sandbox Code Playgroud)
这会设置$TimeOut几秒钟的警报,并在超过警报时杀死子进程(ssh 命令)。
小智 5
我遇到了同样的问题,并使用 Linux“超时”来终止挂起的 scp 会话。
timeout -s 9 1h command command_arguments
Run Code Online (Sandbox Code Playgroud)
如果命令需要一个多小时,将发送 kill -9。
仅供参考 ConnectTimeout 选项对我不起作用。
| 归档时间: |
|
| 查看次数: |
2508 次 |
| 最近记录: |