一段时间后,当远程运行命令产生大量输出时,ssh 连接会冻结

一段时间后,当远程运行命令产生大量输出时,ssh 连接会冻结

情况是这样的:有一个 ssh 客户端(Ubuntu 14.04)和一个 ssh 服务器(Debian 7)。它们之间有很多网络。SSH 连接很容易(并且快速)建立,并且运行良好且快速。

但是,如果连接闲置了一段时间,就会发生一件奇怪的事情 - 连接仍然处于活动状态:我可以输入命令,运行它们,并且这些命令将在服务器上执行,但如果其中一个命令或多个执行的总和产生太多数据(只需几行文本就足够了)那么连接就会冻结,过一会儿(当我再次按下某个按钮时)就会因管道断裂而断开连接。在冻结期间,服务器和客户端都将连接视为仍处于打开状态。

如果有像“top”这样的程序在运行并一直发送数据,连接就不会进入该状态。

我尝试了各种调试选项和日志,但没有看到任何可以解释发生了什么的提示。最令人困惑的是,连接在实际冻结之前仍然可以工作一段时间。任何提示都值得赞赏。

答案1

你可能有一个MTU 问题在您的客户端和服务器之间的连接中。

有时,这个问题会在路由器层面发现,也可能是防火墙问题(在某些情况下允许碎片数据包会有所帮助)。如果您运行类似dmesg(带有大量输出)的命令而不是较小的命令,您经常会看到这种情况。

您负责管理中间网络吗?您能向负责此事的人提及此事吗?

答案2

如果它们在同一个网络中,则可能是巨型帧存在问题,这是 mtu 问题的一个特殊情况。

大量快速输出迫使数据包变得更大。

相关内容