使用SSH连接修复管道损坏的错误

时间:2020-03-05 15:29:43  来源:igfitidea点击:

如果我们使用SSH连接到远程Linux服务器,则会注意到,如果将SSH会话保持一段时间不活动,然后再次尝试使用它,则SSH会话会断开连接,并显示一条错误消息,如下所示:

:client_loop: send disconnect: Broken pipe

在某些系统上,它将显示“写失败:管道损坏”或者“连接被远程主机关闭”。

让我们看看导致此错误的原因以及如何使SSH连接保持活动状态。

使用SSH修复损坏的管道错误

我们可能已经猜到,由于不活动,SSH连接已关闭。
没有设定值,但通常在5分钟左右。

为避免SSH会话断开连接,我们可以做的是在特定时间间隔从服务器向客户端(ClientAliveInterval)或者从客户端向服务器(ServerAliveInterval)发送“活动消息”。

这样,我们就可以使SSH会话保持活动状态,因为客户端和服务器之间存在通信,并且服务器知道客户端仍然存在。

现在,有两种方法可以做到这一点。
我们可以从客户端向服务器发送实时消息,或者从服务器向客户端发送实时消息。

  • 如果我们通过SSH连接到多个服务器,请在计算机上进行设置。
  • 如果我们是系统管理员,并且有几个用户抱怨SSH连接频繁断开,则可以在服务器上进行设置。

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

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

通过SSH连接到远程Linux系统时,我们可以提及ServerAliveInterval值,如下所示:

ssh -o ServerAliveInterval=600 Hyman@theitroad_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连接断开。

我们可以在我们喜欢的基于终端的文本编辑器(如Vim)中编辑/etc/ssh/sshd_config文件。
查找ClientAliveInterval和ClientAliveCountMax条目。
删除行开头的键,并为其指定适当的值。

保存并退出文件。

请勿将SSH连接超时设置为几个小时。
那将浪费资源。