如果你的 SSH(一种加密的远程登录协议)连接表现为”有时秒连、有时卡住十几秒,连上之后打字还有间歇性停顿”,那问题大概率不在 DNS(域名解析系统)反解这类老生常谈上,而是藏在 IPv6(互联网协议第六版)回退、MTU(最大传输单元)黑洞和加密算法协商这三条链路里。本文教你把这三类问题逐一拆开定位:每一类都给出对应的诊断命令、判断依据和配置修复方法,帮你把”时好时坏”的连接变成可复现、可解释的稳定登录。排查逻辑很简单——先看地址族选择是否绕路,再看数据包是否被静默丢弃,最后看两端算法协商是否在空转。

为什么 SSH 会”时快时慢”:先理解三条隐藏链路
SSH 卡顿之所以难排查,是因为它横跨了三个不同层面:地址选择层、传输层和加密层。三层的故障表现都指向同一个现象——连接慢或交互顿,但成因和修法完全不同。
地址选择层的问题出在连接发起前:客户端拿到一个同时有 A 记录和 AAAA(IPv6 地址记录)的主机名时,会优先尝试 IPv6。如果本机有 IPv6 地址但到服务器的 IPv6 路径实际不通,客户端要等回退超时后才改走 IPv4,这一等就是数秒到数十秒,而且只发生在”系统认为 IPv6 可用”的环境里,所以症状时有时无。
传输层的问题出在连接建立后:隧道两端 MTU 协商不当时,超过路径最小 MTU 的数据包会被静默丢弃,表现非常典型——登录、敲命令都正常(小包能过),但传大文件或执行输出大量文本的命令时卡住(大包被丢)。加密层的问题则藏在握手阶段:客户端按配置逐个尝试算法,如果列表里排着服务器不支持或响应极慢的算法,每次连接都要白白等一轮协商失败。下面按这个顺序逐层排查。
第一层:IPv6 回退超时,最隐蔽的连接延迟来源
先做一个小实验来确认是否踩中 IPv6 回退问题。分别用强制地址族的方式各连一次,对比耗时:
time ssh -4 user@your-server-ip exit
time ssh -6 user@your-server-ip exit
如果 -4 连接在一到两秒内完成,而 -6 要么超时要么耗时十几秒,同时不带 -4/-6 的默认连接表现接近 -6,那就可以确认:客户端在优先尝试一条不通的 IPv6 路径。这条路径之所以”时好时坏”,是因为它取决于本机是否恰好拿到了 IPv6 地址——Wi-Fi 和有线切换、路由器重启后,症状会跟着变化。
确认后的修复分两步。临时方案是在客户端配置里按主机指定地址族,立即消除等待:
# 写入 ~/.ssh/config
Host your-server
HostName your-server-ip
AddressFamily inet
根治方案则要看服务器场景:如果服务器本来就没打算提供 IPv6 服务,最干净的做法是在 DNS 服务商处删除或暂停该主机的 AAAA 记录,让所有客户端一开始就走 IPv4;如果 IPv6 必须保留,就要去修 IPv6 路径本身(防火墙放行 22 端口的 v6 流量、检查路由器 IPv6 前缀下发),而不是让客户端每次都去试一条死路。改完后再跑一次上面的 time 对比,默认连接应回到一两秒内完成。
第二层:MTU 黑洞,”能登录但传不动数据”的元凶
MTU 问题有一个非常好认的指纹:登录和短命令一切正常,但凡涉及大数据量传输就卡死。原因是握手和命令交互用的数据包很小,低于路径最小 MTU 所以畅通;而批量传输会把包塞满到 1500 字节或更大,一旦链路中某段(常见于 PPPoE 拨号、VPN 隧道、云平台 overlay 网络)的实际 MTU 更小,且 ICMP(互联网控制报文协议)分片必需报文被防火墙拦截,这些大包就会被静默丢弃——发送方收不到”包太大”的通知,只能反复重传,表现为传输停滞。
用 ping 的不分片选项可以直接测出路径真实 MTU,从客户端向服务器探测:
# Linux:-M do 表示不分片,-s 1472 + 28 字节头部 = 1500
ping -M do -s 1472 your-server-ip
# 逐步下调:1472 -> 1452 -> 1400 -> 1372,找到能通的最大值
ping -M do -s 1452 your-server-ip
如果 1472 不通而 1372 能通,说明路径有效 MTU 约 1400,比标准以太网的 1500 少了 100 字节。此时在服务器网卡上把 MTU 降到实测值即可:
sudo ip link set dev eth0 mtu 1400
# 验证生效并写入持久化配置(以 Netplan 为例)
ip link show eth0 | grep mtu
另一条路是开启 MSS 钳制,让 TCP(传输控制协议)握手时主动声明更小的分段大小,不用改网卡 MTU:
sudo iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
两种方案选其一即可。对于 SSH 场景还有个保守的兜底手段:在客户端配置里启用 IPQoS 与保持包小型化意义不大,更实用的是确认服务器和客户端两端防火墙都放行了 ICMP 类型 3 代码 4(目的不可达-需要分片)报文,让路径 MTU 发现机制恢复工作——很多”MTU 黑洞”其实只是这条报文被安全组误拦。
第三层:加密算法协商空转,每次连接多等几秒
前两层都排除后仍有个固定的小延迟(通常五到十秒),就要看握手阶段的算法协商了。SSH 客户端会按本地配置的算法列表逐一尝试,遇到服务器不支持的就等对方拒绝再试下一个;如果列表前端排着已废弃或服务器未启用的算法,每次连接都要空转几轮。用调试输出能看到完整的协商过程和各阶段耗时:
ssh -v user@your-server-ip 2>&1 | grep -E "kex|cipher|MAC|debug1: Offering"
重点观察两处:一是 debug1: Offering 后面跟着的算法是否接连被拒(no match),二是从发起连接到 SSH2_MSG_KEX_DH_ 类消息出现之间的时间间隔。如果发现客户端在提供服务器不认的老算法(如过时的密钥交换算法),把它们从客户端配置里移除或后置:
# ~/.ssh/config 中显式收敛算法列表,只保留两端都高效支持的现代算法
Host your-server
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
KexAlgorithms curve25519-sha256,ecdh-sha2-nistp256
MACs umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com
服务器端同样建议显式声明,避免依赖发行版默认值。改配置前后各跑三次 time ssh ... exit 取平均,协商优化的收益通常是每次连接省三到八秒——对需要频繁登录跳板机的运维场景,一天下来节省的时间相当可观。顺带一提,收敛算法列表还有安全收益:顺手淘汰了 MD5、SHA1 一类的弱算法。

三类问题对照速查与组合场景
实际故障往往是多层叠加的,下面这张对照表把三类问题的现象、验证命令和修复动作收敛到一起,排查时从上往下逐层排除:
- 默认连接慢、
ssh -4秒连:IPv6 回退超时,客户端设AddressFamily inet或删除服务器 AAAA 记录 - 能登录、传大文件卡死:MTU 黑洞,用
ping -M do二分探测路径 MTU 后调整网卡或钳制 MSS - 每次连接固定多等 5-10 秒:算法协商空转,
ssh -v看协商过程,两端收敛算法列表 - 时快时慢没规律:优先查本机 IPv6 地址状态,
ip -6 addr show看是否刚拿到全局地址 - 改了配置没生效:确认编辑的是实际使用的配置文件,
ssh -G your-server | grep -E "addressfamily|ciphers"核对最终生效值
组合场景举个真实例子:某外贸站服务器同时存在 AAAA 记录和 MTU 1500 的 overlay 网络,管理员之前只按”DNS 慢”调了 UseDNS no 没有效果,后来按上表从上往下排查,十分钟内先后修掉 IPv6 回退和 MTU 两个问题,登录从”三十秒到两分钟不等”稳定到两秒以内。这个案例也说明 SSH 卡顿排查不能押注单一原因,逐层验证才是捷径。

总结与下一步建议
回顾整条排查路径:先用 time ssh -4/-6 对比确认地址族回退,再用 ping -M do 二分测出路径 MTU,最后用 ssh -v 收敛算法列表——三层各自验证、各自修复,大多数”又卡又顿”都能在半小时内定位。这三个方向和 DNS 反解、认证耗时排查互为补充,合起来覆盖了 SSH 连接问题的绝大多数成因。
建议你把这套流程纳入新服务器初始化清单:交付时先跑一遍三层检测,确认 IPv6 路径、MTU 与算法配置都干净,再开始部署业务。如果你需要一台网络路径干净、开箱即用的环境,可以考虑 Hostease 的 VPS 主机或独立服务器,开通后直接按本文命令逐层自检;拿不准 MTU 该设多少、或想确认网络路径质量,也可以提交工单让 Hostease 技术支持协助核对机房侧的网络配置。把连接链路里的隐性等待清理干净,是运维中性价比很高的一项基础工作。
总结一下行动路径:先跑 time ssh -4/-6 对比,再做 ping -M do MTU 探测,最后用 ssh -v 收敛算法——三步都通过后,把这三项检查写进你的运维手册,每次新开服务器都执行一遍。
延伸阅读:如果你怀疑卡顿源头其实是 DNS 反向解析,可以参考我们之前整理的服务器性能排查专题,里面有从登录链路到磁盘 IO 的系列文章;想进一步理解网络层延迟对网站打开速度的影响,TTFB(首字节时间)优化讲的是同一套链路思维。把这套三层排查法收藏到你的运维手册里,下次再遇到 SSH 卡顿,建议直接按本文顺序逐层验证,十分钟内就能出结论。