为什么 ssh 要花这么长时间才能判断是否存在错误?

为什么 ssh 要花这么长时间才能判断是否存在错误?

我使用 ssh 登录我的服务器。有时,我会保持连接状态并离开计算机,此时计算机会进入省电模式(或无论它叫什么 - 屏幕会变黑)。

当我回来并尝试在终端窗口中执行任何操作时,似乎什么都没有发生。不过至少 10 分钟后,它最终显示“写入失败:管道损坏”。

我的问题是,这么大的延迟是怎么回事?为什么花了这么长时间才决定无法再连接到服务器?除了关闭终端并重新启动之外,还有其他方法可以缩短这个时间吗?

答案1

您可以通过键入 ssh -vvv ... 来调试 ssh。这不仅可以调试登录,还可以调试会话。但是,当它不断抛出调试时,可能会有点烦人。'v' 的数量决定了会话中处于活动状态的调试量(v 越多,调试级别越多)。我不确定这是否有助于识别问题,但它可以帮助追踪问题。通常,客户端 ssh 中会设置一个保持活动时间,它会发送“ping”来告诉服务器您仍然处于连接状态,这里是设置该变量的位置:

/etc/ssh/sshd_config 
ClientAliveInterval 30
ClientAliveCountMax 5 

ClientAliveInterval:设置超时间隔(以秒为单位,30),如果在此间隔之后未收到来自客户端的任何数据,sshd 将通过加密通道发送一条消息,以请求客户端做出响应。默认值为 0,表示不会将这些消息发送给客户端。此选项仅适用于协议版本 2。ClientAliveCountMax:设置可在 sshd 未收到来自客户端的任何消息的情况下发送的客户端活动消息数(5)。如果在发送客户端活动消息时达到此阈值,sshd 将断开客户端连接,终止会话。

如果您更改这些设置,请确保通过以下命令重新启动 sshd:

/etc/init.d/ssh restart

希望这可以帮助!

答案2

从未找到这个问题的真正答案,尽管有趣的是,在 Mac 上超时延迟要短得多(可能 30 秒)。

但是,我发现您可以键入~.(波浪号然后是句点)来立即关闭会话。因此,如果 SSH 没有响应,我只需这样做即可。

相关内容