修复 SSH 连接中断管道错误
如果您使用 SSH 连接到远程 Linux 服务器,您会注意到,如果您保持 SSH 会话处于不活动状态一段时间,然后尝试再次使用它,SSH 会话将断开连接并显示如下错误消息:
:client_loop: send disconnect: Broken pipe
在某些系统上,它将显示“写入失败:管道损坏”或“远程主机关闭连接”。
让我们看看是什么导致了这个错误以及如何保持你的 SSH 连接处于活动状态。
修复 SSH 管道损坏错误
你可能已经猜到了,SSH 连接由于不活动而关闭。没有设定值,但通常约为 5 分钟左右。
为避免 SSH 会话断开,您可以采取的措施是在一定时间间隔内从服务器向客户端 ( ClientAliveInterval
) 或从客户端向服务器 ( ) 发送“活动消息”。ServerAliveInterval
这样,您可以保持 SSH 会话处于活动状态,因为客户端和服务器之间存在通信,并且服务器知道客户端仍在那里。
现在有两种方法可以实现这一点。要么从客户端向服务器发送活动消息,要么从服务器向客户端发送活动消息。
- 如果您通过 SSH 连接到多台服务器,请在您的机器上进行设置。
- 如果您是系统管理员,并且有几个用户抱怨 SSH 连接频繁断开,您可以在服务器上进行设置。
方法一:客户端 SSH 配置更改
假设您希望保持 SSH 连接处于活动状态,并且最多有 10 分钟(600 秒)的空闲时间。
通过 SSH 连接到远程 Linux 系统时,您可以ServerAliveInterval
像这样输入该值:
ssh -o ServerAliveInterval=600 username@server_ip_address
现在,这个东西可以工作了,但是每次连接到服务器时手动输入此选项很烦人。为什么不让它永久存在呢?
我希望您了解SSH 配置文件。在客户端,您可以利用它为特定连接或所有连接设置某些 SSH 参数。我在这里详细解释了 SSH 配置文件。
首先,确保您有 ssh 配置文件。如果没有,请创建它:
touch ~/.ssh/config
赋予它正确的文件权限非常重要,否则通过 SSH 连接时将出现权限被拒绝错误。
使用 chmod 命令并为其添加以下文件权限:
chmod 600 ~/.ssh/config
如果您比较懒或者不想详细说明,可以使用此命令将活动间隔设置为 600 秒(10 分钟):
echo "ServerAliveInterval 600" >> ~/.ssh/config
这会将您使用的所有 SSH 连接的 ServerAliveInterval 值设置为 10 分钟。如果您愿意,可以尝试一下。
如果你希望它更加合适,你应该像这样添加它:
Host *
ServerAliveInterval 600
方法 2:服务器端 SSH 配置更改
服务器的 SSH 配置文件通常位于 /etc/ssh/sshd_config。
如果你打开此文件,你会发现这里有两个感兴趣的参数:
ClientAliveInterval
: 这是不活动时间段,经过此时间段后,服务器将向 ssh 连接的客户端发送活动消息。ClientAliveCountMax
:这是服务器尝试发送活动消息的次数。
假设您设置ClientAliveInterval
为 200 秒和ClientAliveCountMax
3。这意味着服务器将在 200 秒后发送活动消息。如果客户端没有活动,它将在 400 秒时再次发送活动消息。如果客户端没有响应/活动,则会在 600 秒时发送另一条活动消息。在此之后(600 秒),SSH 连接断开。
您可以/etc/ssh/sshd_config
在您最喜欢的基于终端的文本编辑器(如 Vim)中编辑该文件。查找 ClientAliveInterval 和 ClientAliveCountMax 条目。删除行首的 # 键并为其赋予适当的值。
保存并退出文件。
请不要将 SSH 连接超时设置为几个小时。这会浪费资源。
希望本教程能帮助您修复 SSH 连接中管道断开错误问题。欢迎您提供反馈。