SSH连接冻结与“写入失败:损坏的pipe道”

我通过SSH从Ubuntu 11.04机器连接到CentOS 5.5盒子。

当连接处于活动状态(即没有延迟或丢失)时,连接似乎可以正常工作,但是如果一段时间内连接处于非活动状态,连接就会冻结,变得无法响应。 最终错误消息“Write failed:Broken pipe”将被退回,我将回到本地机器的提示符。

我可以做些什么来帮助debugging,找出正在发生的事情,并解决这个问题? 作为一名开发人员,这使得我的生活不得不不断重新连接。

它看起来像CentOS框的SSHDconfiguration没有设置为客户端KeepAlive。

把这两行放在CentOS的sshdconfiguration文件(/ etc / ssh / sshd_config)中,重新启动它,然后享受!

KeepAlive yes ClientAliveInterval 60 

当你在这个时候,我build议使用GNU screen保持你的会话在CentOS端保持活跃状态​​。

实际的答案几乎总是在path中有某种NAT设备,通常是防火墙,其状态表具有相当积极的超时。 由于您将ssh连接闲置了一段时间,NAT设备“忘记”您的内部地址和源端口号之间的映射,以及您的短暂外部NAT地址和端口号。

当你稍后尝试在该ssh窗口中执行某些操作时,会为您指定一个新的暂时地址/端口对,目标ssh服务器不知道该地址/端口对,并且不会响应; 稍后,达到一些本地超时,并且连接被本地机器丢弃。

实际的解决办法是完成yuriismaster的build议:启用KeepAlive(确保常规stream量“发痒”该状态表项),并使用远程端的screen (以保持状态,以防事件发生)。 我只发布这个答案,因为你问了发生了什么,以及如何做。 希望这个澄清为什么 yuriismaster的build议是好的。