如果使用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 username@server_ip_address
现在,此功能可以正常工作,但是每次连接到服务器时手动输入此选项很麻烦。为什么不将其永久化?
如果您感到懒惰或不想详细介绍,请使用以下命令将有效间隔设置为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。服务器将在200s后发送活动消息,若客户端无回应,400s后再发送一次,600s再发送一次,若客户端无响应,ssh连接断开
编辑/etc/ssh/sshd_config文件。查找ClientAliveInterval和ClientAliveCountMax条目。删除行开头的#键,并为其指定适当的值。
保存并退出文件。
请勿将SSH连接超时设置为几个小时,那将浪费资源。