如果你使用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错误问题。
成都联想代理www.lenovocd.com【公司名称】成都鸿盛广达科技有限公司
【代理级别】成都联想服务器总代理
【销售经理】成都鸿盛广达科技有限公司
【联系方式】座机:028-85952921 手机:13981931555
【公司地址】成都市武侯区人民南路四段一号时代数码广场A座17楼