云服务器 SSH 登录要等十几秒?从 UseDNS 和 GSSAPI 查起
很多人刚买云服务器时都遇到过:ssh 输入命令后,要卡十几秒才弹出密码提示或进入终端。网络带宽并不差,ping 也正常,问题往往出在 sshd 的两项“反查”上。下面记录一次排查和处理过程,命令在 Ubuntu 22.04/24.04 和 openEuler 上都适用。
一、先确认慢在哪一步
在本地加 -v 参数登录,看日志停在哪:
ssh -v root@你的服务器IP
如果日志停在 “debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password” 附近很久,基本是 GSSAPI 认证在尝试;如果停在 “debug1: SSH2_MSG_SERVICE_ACCEPT received” 之后、认证之前,常见原因是服务端在做 DNS 反向解析。
也可以用 time 量化一下:
time ssh root@你的服务器IP exit
二、原因1:UseDNS 反向解析
sshd 开启 UseDNS 时,会把客户端 IP 反查成主机名。云服务器的内网 DNS 往往查不到你家宽带 IP 的 PTR 记录,只能等超时,于是每次登录都白等几秒。
查看当前配置:
sudo sshd -T | grep -i usedns
处理:编辑 /etc/ssh/sshd_config(或在 /etc/ssh/sshd_config.d/ 下新建 99-fast-login.conf),写入:
UseDNS no
三、原因2:GSSAPI 认证
GSSAPI 是给 Kerberos 环境用的,个人服务器基本用不到,但客户端默认会先尝试它。
服务端可设置:
GSSAPIAuthentication no
客户端也可以在 ~/.ssh/config 里加:
Host *
GSSAPIAuthentication no
四、改完后安全地生效
改 sshd 配置最怕把自己锁在门外,建议按这个顺序:
- 先检查语法:sudo sshd -t (没有输出就是正确)
- 保持当前会话不要关
- 重载服务:sudo systemctl reload ssh (openEuler/CentOS 上是 sshd)
- 新开一个终端测试登录,确认能进再关旧会话
五、其他可能的原因
- /etc/resolv.conf 里的 DNS 不可达:用 resolvectl status 或 cat /etc/resolv.conf 检查,换成可用的 DNS。
- 主机名解析不到:执行 hostname,确认 /etc/hosts 里有 127.0.1.1 对应本机主机名,否则 sudo 等命令也会变慢。
- 服务器负载过高:用 uptime、top 看看 load 和 CPU,内存小的机器在 swap 频繁时登录也会卡。
六、小结
登录慢时先用 ssh -v 定位卡住的阶段,再针对性关闭 UseDNS 或 GSSAPI。这两项修改只影响登录前的反查和认证尝试,不降低密钥或密码认证本身的安全性。只有在按主机名写 AllowUsers 这类规则时,才需要保留 UseDNS。改完用 time ssh … exit 对比前后耗时,就能确认是否见效。
- 点赞
- 收藏
- 关注作者
评论(0)