SSH非活跃状态下连接断开解决

iOS Jailbreak Notes
3 min readOct 8, 2020

--

在使用SSH连接iPad时,一段时间内不操作就会断开,出现如下提示:
client_loop: send disconnect: Broken pipe

对于OpenSSH Server连接断开,这是一个安全功能。N分钟不活动后,SSH连接冻结或掉线。根据OpenSSH手册说明,这通常是由于数据包过滤器或NAT设备由于不活动而超时使TCP连接超时的结果。

有两种方法可以解决此问题。

一、修改SSH配置文件避免连接断开

登录到服务器端,打开你的/etc/ssh/sshd_config文件:

vim /etc/ssh/sshd_config#修改配置如下:
ClientAliveInterval 30
ClientAliveCountMax 5

ClientAliveInterval:设置超时间隔(以秒为单位)(30),在此间隔之后,如果未从客户端接收到任何数据,则sshd将通过加密的通道发送消息以请求客户端的响应。默认值为0,指示这些消息将不发送到客户端。此选项仅适用于协议版本2。
ClientAliveCountMax:设置客户端活动消息的数量(5),该消息可以在不通过sshd接收到来自客户端的任何消息的情况下发送。如果在发送客户端活动消息时达到此阈值,则sshd将断开客户端连接,从而终止会话。

关闭并保存文件。重新启动sshd服务:

ssh restart## 以上命令只针对iPad系统中命令行,其它系统可尝试以下命令
/etc/init.d/ssh restart
service sshd restart
## Linux系统使用如下命令
systemctl restart sshd.service

二、客户端配置增加SSH连接超时

另一种选择就是在客户端的$ HOME/.ssh/sh_config文件中启用ServerAliveInterval选项。当无权访问远程服务器的sshd配置文件时,此功能非常有用。打开终端应用程序,然后输入以下命令并追加配置:

vim ~/.ssh/ssh_config#追加/修改如下的值:
ServerAliveCountMax 3
ServerAliveInterval 15

ServerAliveInterval 15:设置超时间隔(以秒为单位),在此间隔之后,如果未从服务器接收到任何数据,则ssh将通过加密的通道发送消息以请求服务器的响应。例如,将超时设置为15秒。
ClientAliveInterval 3:设置在没有ssh命令从服务器返回任何消息的情况下可以发送的服务器活动消息的数量。如果在发送服务器活动消息时达到此阈值,则ssh将与服务器断开连接,从而终止会话。服务器有效消息是通过加密通道发送的,因此不会被欺骗。

也可以在命令符下使用SSH参数 -o完成此操作下直接执行,如下:

ssh -o ServerAliveCountMax=3 -o ServerAliveInterval=15 my-user-name@my-server-domain-name-here

--

--

iOS Jailbreak Notes
iOS Jailbreak Notes

Written by iOS Jailbreak Notes

清心若水,清水即心。微风无起,波澜不惊。 Study & Research & Notes & Favorites

No responses yet