可能的重复:
SSH 会话中的“损坏的管道”消息意味着什么?
我在服务器上运行一个程序SSH
!程序运行正常,一段时间后我收到一条消息Write failed: Broken pipe
,程序停止。
请问这是什么意思?解决方案是什么?
我可以克服这个问题来更新我的服务器(并重新启动你的 sshd)
echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config
或者客户端:
echo "ServerAliveInterval 60" >> ~/.ssh/config
但如何使其无限呢?不只是60秒!
谢谢
答案1
尝试man sshd_config
并man ssh_config
。
客户端活动间隔
设置超时间隔(以秒为单位),在此之后如果没有从客户端接收到数据,sshd(8) 将通过加密通道发送消息以请求客户端响应。默认为0,表示这些消息不会发送到客户端。此选项仅适用于协议版本 2。
和
服务器活动间隔
设置超时间隔(以秒为单位),在此之后如果没有从服务器接收到数据,ssh(1) 将通过加密通道发送消息以请求服务器响应。默认值为 0,表示这些消息不会发送到服务器;如果设置了 BatchMode 选项,则默认值为 300。此选项仅适用于协议版本 2。
我会避免使用,
echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config
亲自。这似乎是一种笨拙且危险的更新 sshd_config 的方法。我只是想sudo vi
看看 ClientAliveInterval 的现有设置是什么(如果存在)。
最后,我相信您误读了这些设置的作用。他们不会在该时间之后断开连接,而是在该时间之后发送一条保持活动消息,以鼓励连接的两端以及中间的任何防火墙相信连接仍然处于活动状态并且应该保持打开状态。
答案2
如果您不断遇到此问题,我怀疑您的网络连接不稳定,也许您应该检查一下您这边的稳定性问题 - 也许您使用的是信号强度较低的 Wifi。
避免程序停止的一个好方法是使用终端多路复用器,例如GNU 屏幕或者多路复用器。它们会在您的服务器上打开一个后台会话,如果您失去连接或注销,该会话不会关闭 - 一旦您重新连接到服务器,您随时可以重新连接到这些会话。