我正在尝试增加 SSH 超时。命令:
> ssh <host> <command>
我尝试使用:
> time ssh -o ConnectionTimeout=10 <host> "sleep 20"
0.044u 0.040s 0:23.99 0.3% 0+0k 0+152io 0pf+0w
但正如您所看到的,10 秒后并没有超时。
我正在使用以下 SSH 版本:
> ssh --version
ssh.exe: Reflection for Secure IT 7.2.1.99 on x86_64-suse-linux-gnu (64-bit).
我如何设置超时命令行(没有更新不同的文件就像/etc/ssh/sshd_config
,因为我没有 sudo),增加默认超时?
上面的示例是测试超时是否有效(但没有)。我想运行一个运行大约20分钟的作业~。我相信(我可能是错的)默认超时会终止作业并以以下方式结束:
Connection to <host> closed by remote host.
所以我相信我需要增加 ssh 超时。我想使用命令行增加 ssh 超时(因为我没有 sudo,并且不喜欢更新任何文件),这样它就不会在运行时关闭会话。
答案1
ConnectTimeout
不会以任何方式影响已建立的连接,它仅配置 ssh 将等待远程主机响应其首先尝试建立连接的时间。
如果您希望已建立的 ssh 连接在 2 或 10 秒后超时,无论如何,您可以使用的一个愚蠢的技巧是ServerAliveCountMax
设置0,这意味着 ssh 客户端甚至不会关心服务器是否处于活动状态并响应客户端的保持活动数据包,而只会在第一个ServerAliveInterval
过期后缩短所有内容:
$ time ssh -o ServerAliveInterval=2 -o ServerAliveCountMax=0 localhost sleep 2000
Timeout, server localhost not responding.
real 0m2.248s
user 0m0.049s
sys 0m0.018s
这不会终止远程服务器上运行的命令,而只会终止连接。
相反,如果您不希望连接在任意时间间隔后断开,但服务器管理员在服务器端使用了相同的技巧(即通过设置ClientAliveCountMax
为0
和ClientAliveInterval
例如 20 * 60 =1200
秒sshd_config
),你无能为力。使您的连接或远程进程繁忙或配置保持活动都无济于事。
如果它们允许您在远程计算机上运行后台命令,则可能的解决方法是在端口 >= 1024 上运行您自己的 ssh 服务器,或者运行 screen 或 tmux 等终端多路复用器,并在连接断开时立即重新连接并重新附加到它。