一、问题描述

通过SSH登录Linux服务器时,输完用户名就卡住了,需要等待10s才提示密码输入。

二、问题解决思路

2.1 抓包

1、在Linux服务器上抓包 2、从笔记本SSH到Linux服务器,输入用户名并回车 3、等待10s左右,直到登录界面提示输入密码 4、停止抓包

2.2 数据包分析

1、观察到21号包和25号包之间恰好间隔10s. 2、使用frame.number>21 && frame.number<25过滤表达式进行过滤,观察到,Linux服务器当时正向DNS服务器查询IP地址对应的PTR记录,试图获得这个IP地址(笔记本IP地址)所对应的域名。耗时大约10s左右。

2.3 解决步骤

1、在DNS服务器中添加了笔记本IP地址的PTR记录 2、再次登录Linux服务器,发现无卡顿 3、可以使用vi /etc/ssh/sshd_config 命令修改默认配置为"UseDNS no"。(查找用"/DNS+回车键")

[root@localhost server]# vi /etc/ssh/sshd_config
UseDNS no

4、修改后使用cat /etc/ssh/sshd_config |grep -i usedns命令查看配置情况。

[root@localhost server]# cat /etc/ssh/sshd_config |grep -i usedns
UseDNS no

2.4 总结

这台Linux服务器在收到SSH访问请求时,会先查询该客户端IP所对应的PTR记录。假如经过5s还没有收到回复,就再发一次查询。如果第二次查询还是等了5s没回复,就彻底放弃查询。也就是说如果DNS查询成功,就不用等10s。