断开的管道消息在SSH会话中是什么意思?


103

有时我的SSH会话断开并显示一条Write failed: Broken pipe消息。这是什么意思?我如何保持会议开放?

我知道screen,但这不是我要的答案。我认为这是一个sshd配置选项。

Answers:


89

您的服务器可能会关闭闲置时间过长的连接。您可以更新客户端(ServerAliveInterval)或服务器(ClientAliveInterval

 ServerAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the server, ssh(1) will send a message through
         the encrypted channel to request a response from the server.  The
         default is 0, indicating that these messages will not be sent to
         the server.  This option applies to protocol version 2 only.

 ClientAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the client, sshd(8) will send a message
         through the encrypted channel to request a response from the
         client.  The default is 0, indicating that these messages will
         not be sent to the client.  This option applies to protocol
         version 2 only.

要更新服务器(并重新启动sshd

echo "ClientAliveInterval 60" | sudo tee -a /etc/ssh/sshd_config

或客户端:

echo "ServerAliveInterval 60" >> ~/.ssh/config 

注意,有时“ * AliveInterval”不够用stackoverflow.com/questions/10665267/…–
rogerdpack

1
~/.ssh/config我的Mac上没有该软件,我是否必须在该计算机上创建它?
AGamePlayer

5
@AwQiruiGuo是的,您应该首先创建目录(~/.ssh)。所以mkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
Gert

6

一种替代解决方案是使用mosh-移动外壳。与ssh相反,它通过UDP连接并支持漫游。您可以在家中开始会议,暂停笔记本电脑,将它带到办公室/朋友/在您有互联网的任何地方,取消暂停笔记本电脑并继续工作,就好像什么都没发生一样。如果您的网络连接不畅,此功能特别有用:如果击键未到达服务器并不断尝试重新建立连接,它将显示即时反馈。

安装和设置非常简单:它已包含在所有当前的Linux(以及一些非Linux)发行版中,并且可以通过先前的ssh连接协调会话初始化和身份验证。因此,如果两端都安装了mosh软件包,那么如果您能够通过ssh user@servermosh进行连接,则很可能仅通过调用就可以与mosh进行连接mosh user@server

连接失败的主要原因是您必须通过UDP端口(默认范围:60000-61000)访问服务器,才能使mosh正常工作。因此,如果服务器位于防火墙后面,那么您自己就无法运做(如果考虑到安全性),您通常会不走运。


3

如果要延长连接时间,请在客户端中添加:

echo 'ServerAliveInterval 30' | sudo tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | sudo tee -a ~/.ssh/config

ServerAliveCountMax默认情况下,此设置为3。因此,一旦ServerAliveInterval向您的服务器发送了3小包信息,它将自动注销。将其设置为1200意味着此过程将至少发生1200次。简而言之,您应该至少连接30 * 1200秒(10小时)。


5
为什么将sudo用于属于当前用户或尚不存在的文件?
Hubert Grzeskowiak

2

这通常意味着您的网络(TCP)连接已重置。例如,您的互联网提供商重新连接了您或类似的对象。


1

我遇到了同样的问题,但是没有达到预期的效果。如果发现在同一网络上,另一台服务器正在尝试相同的IP地址,则您将面临相同的问题。为了解决这个问题,您需要检查是否还有其他使用相同IP地址的服务器。可以使用arp命令来完成。

我正在使用Debian,因此这里是一些命令示例,用于确定其他服务器是否确实在使用相同的IP地址

apt-get install arp-scan
arp-scan -I eth0 -l | grep 192.168.1.42
  192.168.1.42 d4:eb:9a:f2:11:a1 (Unknown)
  192.168.1.42 f4:23:a4:38:b5:76 (Unknown) (DUP: 2)

您会注意到两组使用相同IP地址的mac地址。通过将一个设置为另一个IP地址来避免冲突。


0

“管道断开消息”的另一个原因是另一台计算机正尝试使用与主机相同的IP。

一种测试其他人是否正在使用该IP的简单方法:

  1. 关闭主机
  2. ping同一个IP,以查看另一台计算机是否正在使用该IP

要找出网络上有哪些机器,可以使用Unix&Linux问题标题:如何查找还有哪些其他机器连接到本地网络

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.