SSH连接香港服务器慢的优化方案
一 快速定位慢在哪一环
- 使用带调试日志的连接:执行命令:ssh -v root@你的IP,观察卡在“Connecting…/Authentications that can continue/…/Last login”哪个阶段,以判定是DNS/GSSAPI/认证方式/登录后脚本导致。
- 用基准时间判断整体耗时:执行:time ssh root@你的IP exit,若“real”明显偏大,说明握手或登录阶段慢。
- 若只是“输入密码后卡住”,优先怀疑服务器端GSSAPI或PAM/登录脚本;若“刚连上就卡”,优先怀疑DNS反向解析或IPv6。
二 服务端优化 优先处理 DNS 与 GSSAPI
- 关闭 SSH 的 DNS 反向解析(见效最快):编辑 /etc/ssh/sshd_config,设置 UseDNS no,保存后重启 SSH 服务(如:systemctl restart sshd)。
- 禁用 GSSAPI 认证(多数内网/非 Kerberos 场景不需要):编辑 /etc/ssh/sshd_config,设置 GSSAPIAuthentication no,重启 SSH。
- 可选 禁用 IPv6(在 IPv6 不通或链路慢的网络):客户端配置 AddressFamily inet 强制走 IPv4。
- 谨慎 关闭 PAM(会影响密码/多因子等认证链路,仅密钥登录环境可考虑):UsePAM no。
- 登录后卡顿的脚本排查:检查并临时注释用户或全局环境文件(如 ~/.bashrc、~/.bash_profile、/root/.bash_profile、/root/.bashrc、/etc/profile)中新增或异常耗时的代码段,再 source 使其生效测试。
三 客户端优化 减少握手等待与提升稳定性
- 禁用 GSSAPI(客户端同样生效):在 ~/.ssh/config 加入
Host *
GSSAPIAuthentication no
- 强制使用 IPv4(如网络对 IPv6 支持不佳):
Host *
AddressFamily inet
Host *
ConnectTimeout 5
ConnectionAttempts 2
- 开启保活避免空闲被中断(服务端/客户端均可按需设置):
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
Host *
Compression yes
Host *
ControlMaster auto
ControlPath ~/.ssh/socket-%r@%h:%p
ControlPersist 600
Host *
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
MACs hmac-sha2-256,hmac-sha2-512
KexAlgorithms diffie-hellman-group-exchange-sha256
- 直连 IP 或写入本地 hosts(规避 DNS 抖动):在 /etc/hosts 加入“服务器IP 你的域名”。
四 网络路径优化 走更稳更快的链路
- 使用代理或加速通道:在 ~/.ssh/config 通过 ProxyCommand 走本地 SOCKS5/HTTP 代理(如 connect -S 127.0.0.1:1080 %h %p);若使用 PAC 模式需将目标主机加入直连列表或切到全局模式,否则不会走代理。
- 减少跃点与选择更优线路:尽量使用有线或更靠近香港的出口;必要时通过企业VPN/专线减少中间跳数与拥塞。
- 选择更快的 DNS:将客户端 /etc/resolv.conf 的 nameserver 调整为低延迟的公共 DNS(如 223.5.5.5/119.29.29.29),或直接使用 IP 连接。
五 一键最小可用配置示例
- 客户端 ~/.ssh/config(按需合并到现有配置)
Host hk
HostName 你的香港服务器IP或域名
User 你的用户名
Port 22
AddressFamily inet
GSSAPIAuthentication no
ConnectTimeout 5
ConnectionAttempts 2
ServerAliveInterval 30
ServerAliveCountMax 5
Compression yes
ControlMaster auto
ControlPath ~/.ssh/socket-%r@%h:%p
ControlPersist 600
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
MACs hmac-sha2-256,hmac-sha2-512
KexAlgorithms diffie-hellman-group-exchange-sha256
如需代理(示例为本地 SOCKS5 1080)
ProxyCommand connect -S 127.0.0.1:1080 %h %p
- 服务端 /etc/ssh/sshd_config(修改后重启 sshd)
UseDNS no
GSSAPIAuthentication no
可选:仅密钥登录时可考虑
UsePAM no
可选:IPv6 不通时客户端用 AddressFamily inet 更稳
- 验证与回滚
- 验证:time ssh hk exit 应明显缩短;交互输入不应再长时间卡顿。
- 回滚:将改动项恢复注释或备份值,再重启 sshd。