DNS 反向解析导致 ssh 连接缓慢

检查 sshd 配置文件

一般,默认的 UseDNS 参数都是注释的

grep UseDNS /etc/ssh/sshd_config

centos 一般默认是这样的,openeuler 22.03 (LTS-SP4) 默认是 no

#UseDNS yes

查看 sshd 配置文件的默认值

方法一

man sshd_config | grep -A 5 UseDNS
  • 指定 sshd(8)是否应查找远程主机名,并检查远程 IP 地址的解析主机名是否映射回相同的 IP 地址
  • 默认值为 “yes”
  • 如果该选项设置为 no,那么在 ~/.ssh/authorized_keys 文件中的 from 选项和 sshd_config 文件中的 Match Host 指令中只能使用地址,不能使用主机名。
     UseDNS  Specifies whether sshd(8) should look up the remote host name, and to check that the resolved host name for the remote IP address maps back to the very same IP address.
             The default is “yes”.

             If this option is set to no then only addresses and not host names may be used in ~/.ssh/authorized_keys from and sshd_config Match Host directives.

方法二

这个方法是验证 sshd 当前的配置,如果修改了 /etc/ssh/sshd_config 配置文件,下面的命令也会看到配置的更新

sshd -T | grep usedns

centos 默认是 yes

usedns yes

修改 sshd 配置文件

/etc/ssh/sshd_config 文件内加入下面的内容,确保没有其他的 UseDNS 是非注释状态

UseDNS no

重启 sshd 应用配置文件

systemctl restart sshd

通过上面的 sshd -T | grep usedns 可以看到 usedns 已经从 yes 变成了 no,再次 ssh 就快很多了

题外扩展

以下内容取自 chatgpt,本人还未验证过

  • 上面的配置文件提到过,如果 UseDNS 选项设置为 no,那么在 ~/.ssh/authorized_keys 文件中的 from 选项和 sshd_config 文件中的 Match Host 指令中只能使用地址,不能使用主机名
  • 这里扩展一下这两个的场景

~/.ssh/authorized_keys 中的 from 条件

from 条件用于限制某个公钥登录的客户端来源(IP 地址或主机名)。你可以在 ~/.ssh/authorized_keys 文件中,为每个公钥添加一个 from 条件,指定只有从特定的 IP 地址或主机才能使用该公钥登录

  • 语法格式
from="host1,host2" ssh-rsa AAAAB3... user@host
  • 示例场景

    • 限制访问到特定 IP 地址:你希望只有从公司内部网或特定的 IP 地址才能通过公钥登录。通过 from 限制,可以确保即使公钥泄露,也只能从指定的 IP 地址登录

      • from="192.168.1.0/24" ssh-rsa AAAAB3... user@host
        
      • 这条配置表示只有从 192.168.1.0/24 网段内的主机才能使用这个公钥登录

    • 限制特定主机名:如果 UseDNS yes,也可以使用主机名进行限制

      • from="trustedhost.example.com" ssh-rsa AAAAB3... user@host
        
      • 这里指定只有主机 trustedhost.example.com 能使用该公钥登录

  • 注意事项

    • UseDNS 设置为 no 时,from 条件只能使用 IP 地址,不能使用主机名
    • 如果 DNS 解析不可靠或延迟很高,建议使用 IP 地址来避免问题

sshd_config 中的 Match Host 指令

Match 指令可以根据多个条件(如客户端的主机名、IP 地址、用户等)对 SSH 配置进行精细控制。Match Host 是其中的一种条件,允许你根据客户端的主机名或 IP 地址为其应用特定的 SSH 设置

  • 语法格式
Match Host pattern
    <SSH 选项>
  • 示例场景

    • 为特定主机应用不同的设置:你可以根据不同的主机名或 IP 地址,对 SSH 配置进行细粒度的控制。例如,要求来自某个主机的连接只能使用密码认证,而来自其他主机的连接可以使用公钥认证

      • Match Host 192.168.1.100
            PasswordAuthentication yes
        Match Host *
            PasswordAuthentication no
        
      • 在这个例子中,IP 为 192.168.1.100 的主机可以使用密码登录,而其他所有主机则必须使用公钥认证

    • 限制特定主机只能通过特定用户登录:你可以限制来自特定 IP 或主机名的登录只能使用特定用户

      • Match Host 192.168.1.100
            AllowUsers specialuser
        
      • 这样,来自 192.168.1.100 的主机只能通过 specialuser 登录

  • 注意事项

    • from 一样,如果 UseDNS 设置为 no,那么 Match Host 只能使用 IP 地址,不能使用主机名
    • Match 指令必须放在 sshd_config 文件的最后部分,因为它会根据条件覆盖前面的全局配置

fromMatch Host 的区别和联系

  • 使用层次

    • from 是针对特定公钥的约束,只作用于 ~/.ssh/authorized_keys 文件中的特定公钥。
    • Match Host 是在全局 SSH 配置中控制客户端主机行为的指令,可以影响整个 SSH 配置文件的行为。
  • 使用场景

    • from 更适合精细化控制单个用户的公钥访问,尤其是在多用户服务器上,只需配置某个用户的公钥。
    • Match Host 更适合全局配置,比如为不同来源的主机或网段设置不同的安全策略。
  • 总结

    • from 条件 允许你为每个公钥设置基于来源 IP 地址或主机名的限制,主要用于细粒度控制单个用户或公钥的来源
    • Match Host 指令 则是服务器级别的配置,允许基于客户端的主机名或 IP 地址应用不同的 SSH 配置
  • 在实际使用中,这两者可以结合使用,通过 from 限制单个公钥的登录来源,同时通过 Match Host 在全局配置文件中对特定来源应用不同的 SSH 策略

posted @ 2024-10-07 21:06  月巴左耳东  阅读(15)  评论(0编辑  收藏  举报  来源