SSH连接香港服务器延迟的排查与优化
一、快速定位延迟阶段
- 出现“输入用户名前卡住”:多与DNS 反向解析、GSSAPI、IPv6有关。
- 出现“输入密码后卡住”:多与认证方式(GSSAPI、PAM)有关。
- 仅首次连接慢:多与密钥生成/主机验证缓存有关。
- 只有某台主机慢:优先排查该主机的网络路径、DNS、SSH 配置。
- 使用命令定位:执行ssh -vvv user@host观察卡在哪一阶段,配合ping、traceroute/mtr查看时延与丢包。以上方法能快速缩小范围,避免盲目改动。
二、服务端优化(见效快,优先执行)
- 关闭 DNS 反向解析:编辑/etc/ssh/sshd_config,设置UseDNS no,重启 SSH 服务(systemctl restart sshd)。
- 禁用 GSSAPI 认证:在/etc/ssh/sshd_config将GSSAPIAuthentication no,重启服务。
- 调整保活与超时:在/etc/ssh/sshd_config设置ClientAliveInterval 60、ClientAliveCountMax 3、TCPKeepAlive yes,重启服务。
- 可选优化:若网络环境 IPv6 不通或慢,可在客户端强制使用 IPv4(见下节客户端配置)。以上改动能显著减少登录阶段的等待与空闲掉线。
三、客户端优化(立即改善交互体验)
- 关闭 GSSAPI:在~/.ssh/config加入GSSAPIAuthentication no。
- 强制使用 IPv4:在~/.ssh/config加入AddressFamily inet。
- 缩短连接超时与重试:在~/.ssh/config加入ConnectTimeout 5、ConnectionAttempts 2。
- 启用保活防空闲断开:在~/.ssh/config加入ServerAliveInterval 30、ServerAliveCountMax 5。
- 复用连接减少握手开销:在~/.ssh/config加入
Host your-hk-host
ControlMaster auto
ControlPath ~/.ssh/control-%r@%h:%p
ControlPersist 10m
- 如仍慢,可开启压缩:在命令行加-C或在配置中加入Compression yes。以上配置对交互延迟与频繁断连尤为有效。
四、网络路径与代理优化(跨境链路关键)
- 路径诊断:用ping观察 RTT,用traceroute/mtr定位高时延或丢包的跳点,必要时更换本地出口、运营商或迁移至更近的可用区/同地域资源。
- 代理/跳板机:若直连高丢包,可通过SOCKS5/HTTP 代理或跳板机转发 SSH。示例(Windows Git Bash,需有本地代理):
Host hk
HostName 1.2.3.4
User ubuntu
ProxyCommand connect -S 127.0.0.1:1080 %h %p
ServerAliveInterval 30
ServerAliveCountMax 5
注意:若使用PAC 模式可能不走代理,需改为全局模式或将目标主机加入直连名单。
- MTU 调整:若跨境链路存在分片,适当降低MTU(如1400)以避免大包重传。
- 替代方案:对高抖动/高丢包环境,可尝试Mosh获得更稳定的交互体验。以上措施对跨境链路尤为关键。
五、常见现象与对应处理
- 首次连接慢:启用公钥登录并缓存主机密钥,避免重复交互与密钥生成开销。
- 输入密码后卡住:优先检查GSSAPI与PAM相关配置(见第二、三节)。
- 空闲一段时间后断开:开启ClientAlive/ServerAlive保活并设置合理计数。
- 偶发“Network error/Software caused connection abort”:检查防火墙/NAT 会话老化、服务器资源(CPU/内存/磁盘)与链路质量,必要时调整MTU或改用Mosh。以上对应策略覆盖大多数延迟与断连场景。