SSH 登录云服务器变慢:先查 GSSAPI 与 DNS 反向解析
前几天登录一台云服务器,ssh 敲下去之后,屏幕停了十几秒才弹出密码提示,输完密码又等了几秒才进 shell。进去之后执行命令却很流畅。这种“只慢在登录那一下”的情况,我遇到过好几次,根因基本落在两个地方:服务端的 GSSAPI 认证和 DNS 反向解析。下面是我现在固定用的排查顺序。
一、先用 -v 看它卡在哪一步
别急着改配置,先让客户端把过程打印出来:
ssh -v user@服务器IP
看输出在哪一行停顿最久。如果停在 Authentications that can continue: gssapi-keyex,gssapi-with-mic 附近,或者在输入密码前卡很久,大概率是 GSSAPI;如果停在密码之后、出现 shell 之前,多半是服务端在做反向解析。先定位,再动手。
二、GSSAPI:默认开着,却很少有人用
很多发行版的 sshd_config 默认开着 GSSAPIAuthentication yes。登录时服务端会先尝试 GSSAPI(Kerberos)认证,客户端配合着做协商,内网没有 Kerberos 环境时这一轮要等到超时才回落到密码认证,十几秒就这么耗掉了。
处理办法很直接,改服务端 /etc/ssh/sshd_config:
GSSAPIAuthentication no
然后 systemctl restart sshd。改之前先留一个已登录的会话,别把自己锁在外面。如果只是临时验证,也可以在客户端绕过:
ssh -o GSSAPIAuthentication=no user@服务器IP
这条命令立刻见效,能马上确认是不是它的问题。
三、UseDNS 与反向解析:密码之后的那几秒
如果卡在输完密码之后,另一个常见原因是 UseDNS。sshd 默认 UseDNS yes,登录成功后会拿客户端 IP 做反向解析,把 IP 解析成主机名。云服务器用的 DNS 解析不到这个 IP、或者解析服务器响应慢,sshd 就会在这里等到超时。
验证办法:
dig -x 客户端IP
nslookup 客户端IP
如果解析超时或者返回 NXDOMAIN,基本就能对上。处理办法有两个:要么在服务端 /etc/hosts 里补一条客户端出口 IP 对应主机名的记录,要么直接在 sshd_config 里关掉:
UseDNS no
再重启 sshd。没有 PTR 记录的出口地址尤其容易中招。
四、顺手再排两点
一是 /etc/hosts 和 resolv.conf:服务端本机解析异常也会拖慢登录,顺手检查 nameserver 是否可达。二是看日志定位:journalctl -u sshd 或 /var/log/secure 里能看到登录各阶段的时间点,和 -v 的输出对照着看,基本不会走偏。如果 -v 全程都快,只是网络本身延迟高,那就是线路问题,和认证配置无关。
结论
SSH 登录慢但登录后一切正常,先别怀疑带宽和负载。按这个顺序查:ssh -v 定位卡点,关 GSSAPIAuthentication,再处理 UseDNS 与反向解析,最后看日志确认。我的经验是,前两项改完,绝大多数“登录要等十几秒”的问题就消失了。重启 sshd 后立即用新会话验证一次。
- 点赞
- 收藏
- 关注作者
评论(0)