ssh连接超时断开多因静默终止或保活失效,需先区分“连不上”与“连上后空闲中断”:若卡在connecting to…属网络层问题;卡在认证阶段多因usedns/gssapi超时;登录后3–5分钟断开则为典型空闲超时,应检查serveraliveinterval、clientaliveinterval及中间设备超时策略。

SSH 客户端连接超时断开,多数不是网络“不通”,而是连接被静默终止或保活失效。关键要分清是“连不上”还是“连上后几分钟断”,再针对性查。
先确认断开模式:是连接建立失败,还是空闲后中断?
执行 ssh -v user@host 观察日志停顿点:
- 卡在
Connecting to...后几秒 → 可能 DNS 解析、IPv6 fallback 或路由问题 - 卡在
Authenticating to...和Server accepts key之间 → 大概率是服务端UseDNS yes或GSSAPIAuthentication yes超时 - 成功登录后,无操作 3–5 分钟出现
Write failed: Broken pipe或Connection timed out→ 典型空闲超时,重点查保活与中间设备
检查客户端保活是否生效
客户端默认不发心跳,容易被 NAT/防火墙回收连接。确认 ~/.ssh/config 中有:
Host *-
ServerAliveInterval 60(建议 30–120,勿设为 0) -
ServerAliveCountMax 3(即最多容忍 3 分钟无响应)
临时验证可直接加参数:ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 user@host
抓包定位谁主动断开连接
在服务器端运行:
tcpdump -i any 'host 客户端IP and port 22' -w ssh_drop.pcap -G 300复现断连后,用 Wireshark 打开 pcap,过滤:tcp.flags.fin == 1 or tcp.flags.reset == 1
- FIN 来自客户端 IP → 客户端(如终端软件、SSH 进程)主动关闭
- FIN 来自服务端 IP → sshd 或系统内核触发断连(查
ClientAlive*配置) - FIN/RST 来自中间 IP(如网关、负载均衡器)→ 设备空闲超时回收,需同步调整其策略
排查服务端和系统级干扰项
登录服务器后快速检查这几项:
-
systemctl status sshd→ 确认服务正常运行 -
ss -ti src :22 | grep -E "(retrans|lastrcv)"→ 若lastrcv停滞远超 300 秒,说明保活没传到 -
grep -E "UseDNS|GSSAPI" /etc/ssh/sshd_config→ 必须为no,否则认证前就卡住 -
cat /etc/nsswitch.conf | grep hosts→ 避免hosts: files dns中 DNS 不可用却死等;推荐hosts: files [UNAVAIL=return] dns











