最常见原因是服务端启用UseDNS导致反向DNS解析超时;可通过ssh -v查看debug日志确认卡点,用sudo sshd -T | grep usedns检查配置,并修改/etc/ssh/sshd_config中UseDNS为no后重启sshd服务解决。

SSH 登录卡在输入用户名后、迟迟不出现 Password: 提示,最常见原因就是服务端开启了 DNS 反向解析(UseDNS),而客户端 IP 没有对应的 PTR 记录,或服务器无法访问可用 DNS 服务,导致等待超时(通常 5–10 秒)。
看日志定位卡点
在客户端执行带详细调试信息的连接命令:
- ssh -v user@host(加一个 -v 即可;若需更细粒度,可用 -vvv)
- 观察输出中 debug1: Authentications that can continue: 这一行之后是否长时间无响应
- 若此后停顿数秒才继续,且日志中未出现明显错误,基本可锁定是服务端 UseDNS 导致的反向查询阻塞
查服务端当前配置
登录目标服务器(如能临时连上),直接检查 SSH 服务端配置状态:
- 运行 sudo sshd -T | grep usedns —— 输出 usedns yes 表示已启用,usedns no 表示已关闭
- 也可直接查看配置文件:grep -i "usedns" /etc/ssh/sshd_config
- 注意:该设置在 /etc/ssh/sshd_config 中,不是客户端的
~/.ssh/config或/etc/ssh/ssh_config
验证 DNS 解析行为
手动模拟服务端会做的反向查询,确认是否真会超时:
- 获取你本地客户端的公网或内网 IP(如通过
curl ifconfig.me或查看网络配置) - 用 dig -x [你的IP] @8.8.8.8 或 nslookup [你的IP] 测试反向解析是否返回结果
- 若返回 server can't find ...: NXDOMAIN 或超时无响应,就说明服务端开启 UseDNS 后必然卡住
临时禁用快速验证
不改配置也能立即验证是否为该问题:
- 在服务端执行:sudo sed -i 's/^#*UseDNS.*/UseDNS no/' /etc/ssh/sshd_config
- 语法检查:sudo sshd -t(无报错才继续)
- 重启服务:sudo systemctl restart sshd
- 再从客户端重试
ssh user@host—— 若瞬间弹出密码框,即可 100% 确认是 UseDNS 导致











