使用SSH连接修复管道损坏的错误
如果我们使用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连接超时设置为几个小时。
那将浪费资源。