为什么SSH连上几分钟就自动断开?

为什么SSH连上几分钟就自动断开?

百科教程

SSH连接几分钟无操作即断开是因服务器端保活机制触发空闲超时,可通过调整ClientAliveInterval与ClientAliveCountMax参数、配置客户端ServerAliveInterval保活、修改全局ssh_config、命令行临时启用或排查NAT/防火墙超时解决。

如果您通过SSH连接Linux服务器后,几分钟内无操作即自动断开,则很可能是由服务器端保活机制触发的空闲超时判定。以下是解决此问题的步骤:

一、检查并调整服务器端SSH保活参数

服务器通过ClientAliveIntervalClientAliveCountMax两个参数控制空闲连接的存活行为。若二者乘积过小(例如10×1=10秒或60×1=60秒),就会导致连接在短暂闲置后被强制终止。

1、使用root权限编辑SSH服务配置文件:sudo vi /etc/ssh/sshd_config

2、查找或添加以下两行配置:

3、将ClientAliveInterval设为60(表示每60秒发送一次保活探测)

4、将ClientAliveCountMax设为3(表示允许连续3次无响应,总容忍闲置时间达180秒)

5、保存文件后执行命令重载服务:sudo systemctl reload sshd

二、配置客户端主动发送保活信号

当无法修改服务器配置时,可在客户端侧设置反向心跳机制,由本地SSH进程定期向服务器发送NO-OP包,维持TCP连接活跃状态,避免中间网络设备因超时清理会话。

1、编辑用户级SSH客户端配置文件:nano ~/.ssh/config

2、在文件中添加以下内容(适用于所有主机):

3、输入:Host *

4、换行后输入:ServerAliveInterval 60

5、再换行输入:ServerAliveCountMax 3

6、保存退出,后续所有SSH连接将自动启用该保活策略

三、修改全局客户端配置文件

若需对系统所有用户生效,可直接编辑全局客户端配置,使所有本地发起的SSH连接默认携带保活指令,无需逐个用户配置。

1、以root身份打开全局客户端配置:sudo vi /etc/ssh/ssh_config

Picsart

Picsart是全球最大的数字创作平台。

下载

2、定位到文件末尾,添加如下三行:

3、Host *

4、ServerAliveInterval 60

5、ServerAliveCountMax 3

6、保存后,所有非root用户调用ssh命令时均继承该保活设置

四、使用命令行临时启用保活

对于单次连接场景,无需修改任何配置文件,仅通过SSH命令参数即可即时启用保活机制,适合调试或临时长任务执行。

1、在终端中执行SSH连接命令时,附加选项:ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 user@host

2、该连接将在后台每60秒向服务器发送一次保活包

3、若连续3次未获响应,连接才终止;否则将持续保持活跃

五、排查NAT或防火墙导致的连接中断

某些家用路由器、企业防火墙或云平台安全组会对空闲TCP连接设置极短的会话超时(如300秒),即使SSH保活正常,中间设备仍可能单方面关闭连接。

1、在客户端持续执行:ping -t server_ip(Windows)或ping server_ip(Linux/macOS)

2、观察SSH断开时刻是否同步出现ICMP丢包或延迟骤增

3、检查服务器所在网络环境是否启用了net.ipv4.tcp_tw_recycle,该参数在NAT环境下会导致连接异常中断

4、运行命令确认:sysctl net.ipv4.tcp_tw_recycle,若返回值为1,需将其设为0并刷新内核参数

本文地址:https://www.sztg.com.cn/article/655262.html

如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!

猜您喜欢