文档首页> 技术教程> SSH 登录慢:DNS 反解与 UseDNS 的关系

SSH 登录慢:DNS 反解与 UseDNS 的关系

发布时间:2026-05-21 16:12        更新时间:2026-05-22 15:22
SSH 连上去要干等十几秒才提示输密码,问题多半出在两个配置上:服务端做 DNS 反向解析,和 GSSAPI 认证空转。逐个关掉,附验证方法。 ## 原因一:DNS 反向解析拖时间 sshd 在部分发行版上默认会对来源 IP 做反向 DNS 查询,用于日志记录与安全校验。服务器若没有可用的 DNS 或解析超时,每次连接都白等一个超时周期。确认与修改: ``` sudo grep -i usedns /etc/ssh/sshd_config # 修改为: UseDNS no ``` 改完先用 sudo sshd -t 检查语法,无输出再 sudo systemctl restart sshd,已有连接不受影响。多数新系统默认已是 no,老系统常见 yes。服务器本身的解析配置也顺带看一眼:/etc/resolv.conf 里的第一行 DNS 若指向不可达的地址,任何解析都会拖满超时,换成可用的 DNS 或调整顺序。 ## 原因二:GSSAPI 认证空转 GSSAPI 是一套基于 Kerberos 的认证机制,普通服务器没有对应的密钥体系,sshd 却会先尝试一轮再回落到密码认证,这一来一回经常吃掉好几秒: ``` GSSAPIAuthentication no ``` 同样写进 /etc/ssh/sshd_config 并重启服务。两个开关都在时,登录一般能从十几秒回到一两秒。想确认最终生效的配置,sudo sshd -T | grep -iE 'usedns|gssapi' 看的是运行态真值,比 grep 文件更可靠。配置文件里同一参数写多次时,sshd 取第一个出现的值,注释掉的行不参与。 ## 改之前先排除别的原因 网络本身慢、链路丢包也会表现为登录慢,但那类慢是持续的交互卡顿;DNS 和 GSSAPI 造成的慢集中在连上之后、出密码提示之前,特征不同,先分清。密钥登录卡顿还要检查客户端是否背了一大串待尝试的私钥,ssh -v 能看到完整尝试过程。 ## 验证方法 用 time 计时最直观: ``` time ssh user@host exit ``` 改配置前后各跑两次对比。要看细节就 ssh -v,观察卡在哪一行输出:停在 Connecting 之后是网络问题,停在 gssapi 相关行就是认证空转。最后提醒:改 sshd_config 前保留一个已登录的会话别退出,配置写错也不至于把自己锁在门外。