client_loop: send disconnect: Broken pipe|连接CentOS服务器:ssh空闲自动断开

ssh空闲自动断开
首先,我们在本机终端中使用ssh命令连接到远程服务器的时候,经常出现空闲一段时间ssh连接就断开的情况,每次都要重新输入密码,非常麻烦,而且之前连接中输入的命令也无法查看了。

原因是,ssh连接在一段时间检测不到操作后,就会进入假死状态,超时自动断开。

解决这个问题的方式也很简单,你既然要隔一段时间就非得检测到操作,那我就隔一段时间就去操作一次就好了。那难道这个操作需要我们自己手动操作吗?

其实,我们可以使用心跳机制,在配置文件中设置每隔一段时间就发送一个心跳包,来维持这次的ssh连接不中断。

解决办法
⇒ 客户端配置

我们可以在我们本机上,进行客户端的配置,每隔一段时间向服务器发送一个心跳包,来维持这次的ssh连接通道不关闭。

以macOS的terminal终端举例:

打开terminal终端,进入/etc/ssh目录


编辑ssh_config文件,此文件为ssh的客户端配置文件。

sudo vim ./ssh_config
1
在ssh_config文件的最下方的Host *中新增

ServerAliveInterval 60
1
vim编译器中Shift + i进入编辑模式
编辑完成后,ESC退出编辑模式,:wq保存并退出当前文件

 

ServerAliveInterval 60 的含义是,每隔60s,就向ssh连接的服务器发送一个心跳包,维持ssh连接。

上面这个方式是macOS的全局配置,如果macOS下有多个用户,只想对当前用户进行配置的话,就进入当前用户的ssh_config下修改文件即可。

⇒ 服务端配置

我们可以通过ssh连接到我们的服务器上,对服务器进行配置。

cd /etc/ssh
1


编辑sshd_config文件,此文件为ssh服务端配置文件。

vim ./sshd_config
1
查找以下注释字段取消注释或直接添加至文件最后

ClientAliveInterval 60
ClientAliveCountMax 3
1
2
ClientAliveInterval 60 的含义是,每隔60s,就向ssh连接的客户端发送一个心跳包,维持ssh连接。

ClientAliveCountMax 3的含义是,服务器发出请求后客户端没有响应的次数达到一定值,就自动断开。正常情况下,客户端不会不响应。

client_loop: send disconnect: Broken pipe
在进行了ssh心跳的配置后,可能相隔一段时间还会出现下面这个错误。

client_loop: send disconnect: Broken pipe

解决方案
修改客户端的 /etc/ssh/ssh_config 配置文件
在Host *条目下添加 IPQoS=throughput

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/Svik_zy/article/details/127652195

posted on 2025-01-07 14:42  刘应杰  阅读(1132)  评论(0)    收藏  举报

导航