工作中偶然遇到的一个问题,有用户反应说每次通过 SSH 登录服务器时有 30秒左右延迟,开始以为是网络问题,但后面检查时发现内网连接也是如此,那应该是和登录环境无关。

原因

通过搜索发现可能和 UseDNS 服务有关系。UseDNS 打开时服务器会先根据客户端的 IP 地址进行 DNS PTR 反向查询出客户端的主机名,然后根据查询出的客户端主机名进行 DNS 正向 A 记录查询,并验证是否与原始 IP 地址一致,通过此种措施来防止客户端欺骗。

不过一般都是动态 IP 不会有 PTR 记录,所以打开此选项也没有太多作用。

# vi 打开 sshd_config 文件
vi /etc/ssh/sshd_config
# 找到 UseDNS 这一行,取消注释,然后把 yes 改成 no
UseDNS no

# 直接用 sed 命令也是一样的效果
sed -i '/UseDNS/a\UseDNS no'  /etc/ssh/sshd_config

# 重启 sshd 服务
systemctl restart sshd

退出后再次通过 SSH 连接,可以发现已恢复正常。

注:

  • PTR(Pointer Record)是电子邮件系统中的邮件交换记录的一种,常用于反向地址解析(即根据 IP 地址解析到域名)。