服务器SSH连接慢,DNS反向解析问题解决办法

前言

用 ssh 登录服务器,输入密码前要等好几秒甚至十几秒才出现密码提示,连上之后命令回显也卡。很多人以为是网络差,其实最常见原因是 sshd 在做 DNS 反向解析,解析超时才放行。本篇给出关闭反向解析的标准做法。

一、为什么会慢:DNS反向解析

客户端连上后,sshd 默认会把客户端 IP 反查成主机名(UseDNS yes)。如果服务器配的 DNS 解析不了这个公网 IP,就一直等到超时,表现为卡在登录前。

二、关闭sshd反向解析(核心)

编辑配置文件:

vi /etc/ssh/sshd_config

找到或新增两行:

UseDNS no
GSSAPIAuthentication no
  • UseDNS no:关闭IP反查;
  • GSSAPIAuthentication no:关闭GSSAPI认证,这也会触发额外DNS查询导致卡顿。

三、重启sshd生效

systemctl restart sshd
# CentOS7 服务名是 sshd,部分发行版是 ssh
systemctl status sshd

注意:重启前保留一个已登录的会话,避免配置写错把自己锁在外面。

四、其他导致SSH慢的因素

  1. DNS配置本身慢:检查 /etc/resolv.conf,解析超时的nameserver会拖慢所有服务,可临时改成公共DNS测试;
  2. 反向解析写进hosts:不想关UseDNS也可在 /etc/hosts 里把常用客户端IP和主机名写死,跳过查询;
  3. GSSAPI:客户端侧也可加 -o GSSAPIAuthentication=no 临时绕过;
  4. 登录banner/反向PTR:某些版本还会尝试获取PTR记录,关UseDNS一并解决。

五、验证是否改善

# 客户端用详细模式看卡在哪一步
ssh -v root@服务器IP

观察卡在 Trying reverse mapping / GSSAPI 字样的位置,关掉对应项后应秒出密码提示。

常见坑

  1. 改完不重启sshd:配置不生效;
  2. 改错文件:是 sshd_config(服务端),不是 ssh_config(客户端);
  3. 重启时断开当前连接:保留旧会话再操作,防止锁死;
  4. 公司内网IP也被反查:UseDNS no 对所有连接生效,不影响安全登录。

总结

SSH登录慢九成是 UseDNS yes 反向解析超时,改 /etc/ssh/sshd_config 为 UseDNS no、GSSAPIAuthentication no,重启sshd即可秒连。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-20 07:27 

服务器ssh连接慢,DNS反向解析问题解决办法

前言

有没有遇到过这种情况:SSH 登录服务器的时候,输入密码之前要等好几秒甚至十几秒才出密码提示框?服务器性能明明没问题,网络也不差,但 SSH 就是连得慢。这十有八九是 SSH 在做 DNS 反向解析拖慢了速度。本文就讲一下这个问题的原因和解决办法。

问题现象

正常情况下,SSH 连接服务器应该秒连。但如果你遇到的是这样的情况:

$ ssh root@192.168.1.100
# 这里卡住了 5-10 秒
root@192.168.1.100's password:

输入完 ssh 命令后,要等好几秒才出密码提示,那就大概率是 DNS 反向解析的问题。

为什么会这样

SSH 默认会做一件事:当客户端连接过来时,服务器会根据客户端的 IP 地址反查它的域名(PTR 记录)。这个过程叫反向 DNS 解析。

如果你的服务器 DNS 配置有问题,或者客户端的 IP 没有反向解析记录,这个反查过程就会卡住,直到超时才继续。这就是 SSH 连接慢的根本原因。

解决办法:关闭反向解析

修改 SSH 配置文件,禁用反向 DNS 解析。

1. 编辑 sshd_config

vi /etc/ssh/sshd_config

2. 找到或添加这两行

UseDNS no
GSSAPIAuthentication no
  • UseDNS no:关闭反向 DNS 解析
  • GSSAPIAuthentication no:关闭 GSSAPI 认证(这也会拖慢连接)

3. 重启 SSH 服务

systemctl restart sshd

CentOS7 上是 sshd,Debian/Ubuntu 上是 ssh,别搞混了。

4. 验证

再用 SSH 连一下,应该秒连了。

其他可能导致 SSH 慢的原因

除了 DNS 反向解析,还有几个常见原因也会导致 SSH 连接慢:

1. 反向解析超时时间太长

默认的反向解析超时时间比较长。除了直接关闭 UseDNS,也可以改短超时时间:

UseDNS no

直接关掉是最简单的。

2. GSSAPI 认证

有些系统默认开启了 GSSAPI 认证,这个认证过程也很慢。关掉它:

GSSAPIAuthentication no

3. DNS 服务器配置不对

如果你的服务器 /etc/resolv.conf 里配的 DNS 服务器不通或者很慢,反向解析就会超时。可以改成公共 DNS:

vi /etc/resolv.conf

改成:

nameserver 8.8.8.8
nameserver 114.114.114.114

4. 主机名解析问题

如果服务器的主机名在 /etc/hosts 里没有配置,SSH 启动时可能会卡住。把主机名加到 hosts 文件里:

vi /etc/hosts

加上一行:

127.0.0.1   localhost localhost.localdomain
192.168.1.100   your-hostname

怎么确认是不是 DNS 反向解析的问题

改完配置之前,可以先验证一下是不是这个原因。

方法1:查看 SSH 调试日志

在客户端用 -v 参数连接,看详细日志:

ssh -v root@192.168.1.100

如果日志里有类似这样的输出,就是在做反向解析:

debug1: Remote: /root/.ssh/rc: line 1: message: command not found
debug1: channel 0: free: client-session, nchannels 1

中间如果有停顿,就是在反查 DNS。

方法2:在服务器端看日志

在服务器上看 SSH 日志:

tail -f /var/log/secure

连接的时候如果有 reverse mapping 或 dns 相关的字样,就是 DNS 问题。

常见坑

坑1:改完配置忘了重启 sshd

改完 /etc/ssh/sshd_config 后必须重启 SSH 服务才生效:

systemctl restart sshd

很多人改完就直接测试,发现没效果,以为没改对,其实就是忘了重启。

坑2:把 UseDNS 写成了 UseDns

大小写敏感!必须是 UseDNS no,D 和 N 都要大写。写成 UseDns 或者 usedns 都不生效。

坑3:改完配置连不上了

如果改完 SSH 配置后连不上了,可能是配置写错了。千万不要关掉当前 SSH 窗口!新开一个窗口测试,确认没问题了再关旧窗口。

总结

SSH 连接慢的排查步骤:

  1. 先确认是不是 DNS 反向解析的问题
  2. 修改 /etc/ssh/sshd_config,加 UseDNS no 和 GSSAPIAuthentication no
  3. 重启 sshd 服务
  4. 再连接测试,应该秒连

这是 Linux 服务器最常见的优化之一,改完立竿见影。如果你的服务器 SSH 连接慢,先试试这个方法,90% 的情况都能解决。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-5 07:29 
'); })();