帮助中心

立即注册 咨询客服

当前位置:首页 > 帮助中心> 如何修复SSH连接时出现的Broken pipe错误

如何修复SSH连接时出现的Broken pipe错误

发布时间:2020年10月13日 08:27:00    来源: A5互联

如果你使用SSH连接到远程Linux服务器,你会注意到,如果你的SSH会话保持一段时间不活动,然后试图再次使用它,SSH会话就会以这样的错误信息断开。

:client_loop: send disconnect: Broken pipe

在某些系统中,它会显示 "Write failed: Broken pipe"或 "Connection closed by remote host"。

让我们看看是什么原因导致这个错误,以及如何去保持你的SSH连接。

用SSH修复broken pipe错误

你可能已经猜到了,SSH连接因为不活动而被关闭。虽然没有设定值,但通常在5分钟左右。

要避免SSH会话断开,您可以做的是从服务器到客户端(ClientAliveInterval)或以一定的时间间隔从客户端到服务器(ServerAliveInterval)发送一条“alive message”。

通过这种方式,可以使SSH会话保持活动状态,因为客户机和服务器之间存在通信,而服务器知道客户机仍然存在。

现在,有两种方法可以做到这一点。要么你从客户端向服务器发送活着的消息,要么从服务器向客户端发送活着的消息。

如果您通过SSH连接到多个服务器,请在您的机器上设置它。

如果你是一个系统管理员,有几个用户抱怨SSH连接频繁断开,你可以在服务器上设置。

方法1:客户端SSH配置更改

假设您想通过最多10分钟(600秒)的空闲时间来保持SSH连接的活动状态

通过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连接中的pipe错误问题。