服务器SSH连接慢DNS反向解析解决办法
时间:2026-11-14 07:43 作者:emer 分类: 无
现象:用 ssh 登录服务器,输完密码前要干等十几秒甚至更久,登录后一切正常。这种“卡在登录前”的慢,绝大多数不是网络带宽问题,而是 sshd 默认开启了反向 DNS 解析:它拿到客户端 IP 后会去做一次 PTR 反查,查不到或 DNS 超时,就一直等到超时才放行。关掉这个反查,登录立刻变快。
一、原理:sshd 的反向解析
默认配置里 sshd 会对来源 IP 做反向 DNS,并记录到日志的主机名。如果服务器本身 DNS 不通、或者客户端 IP 没有 PTR 记录,反查会阻塞到超时,表现就是“连得上但很慢”。
二、关闭反向 DNS(核心修改)
编辑 sshd 配置:
vim /etc/ssh/sshd_config
找到并修改(没有就新增):
UseDNS no
GSSAPIAuthentication no
- UseDNS no:关闭反向 DNS 解析,这是解决慢的关键。
- GSSAPIAuthentication no:关闭 GSSAPI 认证探测,进一步减少等待。
三、重启 sshd 生效
# CentOS7 / Systemd
systemctl restart sshd
# 老版本或 Ubuntu
service sshd restart
注意:务必另开一个连接先测试,不要关掉当前会话,防止配置写错把自己挡在门外。
四、验证是否还慢
新开一个终端用 -v 看握手过程:
ssh -v root@服务器IP
观察日志,如果不再出现 “reverse mapping”、“Trying GSSAPI” 之类的等待,且输入提示立即出现,说明生效。
五、其他可能导致 SSH 慢的原因
- DNS 服务器本身慢:/etc/resolv.conf 里的 nameserver 不可达,可临时改成公共 DNS 或先在 UseDNS 关闭后观察。
- 认证探测过多:在 sshd_config 里关闭不需要的认证方式:
PubkeyAuthentication yes
PasswordAuthentication yes
KbdInteractiveAuthentication no
UsePAM yes
- 客户端到服务器网络抖动:用 ping、mtr 看延迟丢包,区分是服务端配置还是链路问题。
- 防火墙限流或 fail2ban 误判:第一次卡、之后正常,多为反查;一直被拒才看防火墙。
- 登录后慢另说:登录成功才慢,通常是 ~/.bashrc、motd、脚本加载,和反查无关。
常见坑
- 只改了 UseDNS 没重启 sshd,配置不生效,必须 restart。
- 改错文件:客户端是 ssh_config,服务端是 sshd_config,别弄混。
- 关了反查但仍慢,多为 GSSAPI 或 DNS 服务器问题,两项一起关。
- 远程改配置断连风险高,保留一个已登录窗口做兜底。
- 公网服务器建议配合密钥登录并关闭密码登录,既快又安全。
总结
SSH 登录前卡顿先查反向 DNS:在 /etc/ssh/sshd_config 设置 UseDNS no 和 GSSAPIAuthentication no,重启 sshd 即可秒连。仍慢再依次排查 DNS 服务器、认证探测和网络链路。
遇到问题加QQ23979811 协助处理