SSH连接几分钟后自动断开绝大多数是空闲超时机制触发,需先区分“连不上”与“连上后断”:Connection timed out属网络层阻断,Connection refused表明服务未响应,Broken pipe或Connection reset by peer则确认为空闲超时;应检查服务端ClientAliveInterval 60与ClientAliveCountMax 3配置并重载sshd,同时在客户端~/.ssh/config中设置ServerAliveInterval 45和ServerAliveCountMax 2以应对中间设备5分钟TCP超时,并排查UseDNS、TCPKeepAlive及.ssh目录权限等问题。

SSH连接几分钟后自动断开,绝大多数情况是空闲超时机制触发的,不是网络突然中断。关键要先区分“连不上”和“连上后断”,再针对性排查。
第一步:确认是“空闲断连”还是“根本连不上”
看终端提示:
- Connection timed out → 请求发不出去,卡在网络中间(防火墙、安全组、路由问题)
- Connection refused → 请求到了服务器门口,但没人应门(sshd没运行、只监听127.0.0.1、端口不对)
- Write failed: Broken pipe 或 Connection reset by peer → 连接已建立,运行几分钟后突然断,大概率是空闲超时
第二步:查服务端是否启用了保活但阈值太短
登录服务器,检查 /etc/ssh/sshd_config 中这两项:
- ClientAliveInterval:默认常为0(禁用),设为60表示每60秒发一次心跳
- ClientAliveCountMax:默认常为3,表示连续3次无响应就断连
如果两者乘积小于180(比如设成30×1=30),就会导致2分钟内无操作就断。建议统一设为ClientAliveInterval 60 和 ClientAliveCountMax 3,然后执行 sudo systemctl reload sshd 生效。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
第三步:检查中间设备是否提前回收连接
很多企业防火墙、家用路由器、云平台负载均衡器(如AWS NLB、阿里云SLB)都有自己的TCP空闲超时策略,常见为300秒(5分钟)或600秒。它们会主动发送FIN包断开“静默”连接,而SSH服务本身还不知道。
- 用
tcpdump -i any 'host SERVER_IP and port 22'抓包,观察FIN/RST是不是由非服务器IP发出 - 客户端侧加保活更可靠:编辑
~/.ssh/config,加入
ServerAliveInterval 45
ServerAliveCountMax 2
这样客户端每45秒主动发一次心跳,总容忍90秒无响应,能覆盖多数中间设备的5分钟限制。
第四步:排除系统级干扰因素
有些情况看似超时,实则另有原因:
-
UseDNS yes(默认)→ 每次登录尝试反向DNS解析客户端IP,若DNS慢或失败,会导致认证阶段卡顿甚至超时,直接在
sshd_config里改成UseDNS no -
TCPKeepAlive no→ 内核TCP保活关闭,对L4负载均衡无效,建议设为
yes -
.ssh目录权限过宽(如755)→ 密钥登录会被OpenSSH静默拒绝,表现为输完密码就断,检查
chmod 700 ~/.ssh && chmod 600 ~/.ssh/*

















