it-swarm.cn

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

有时我的SSH会话会以Write failed: Broken pipe消息断开连接。这是什么意思?我如何保持会议开放?

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

107
Peter Stuifzand

您的服务器可能会关闭闲置时间过长的连接。您可以更新客户端(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 
92
Gert

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

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

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

6
Perseids

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

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

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

5
Francisco Costa

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

2
maxschlepzig

我遇到了同样的问题,但是没有达到预期的效果。如果发现在同一网络上,另一台服务器正在尝试相同的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地址来避免冲突。

1
Bill Ang

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

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

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

要找出网络上有哪些计算机,可以使用以下Unix和Linux问题标题: 如何查找连接到本地网络的其他计算机

0
Josir