[排错] 解决 SSH 远程登录时很慢但 ping 时延迟很低

分析

ssh 远程某台服务器时很慢,但是 ping 时延迟却很低。这可能是 DNS 解析出现问题造成的,禁用服务器上 sshd 的 GSSAPIAuthentication 参数和 UseDNS 参数可以解决,这两个参数的作用是:
1) GSSAPIAuthentication,当服务器的 sshd 服务此参数处于开启状态时,客户端 SSH 登录此服务器时,客户端会对服务器的 IP 地址进行 PTR 反解析,获得服务器的域名,再通过服务器的域名对服务器进行 DNS A 正向 IP 地址解析,通过此方法来防止欺骗。
2) UseDNS,当服务器的 sshd 服务此参数处于开启状态时,客户端 SSH 登录此服务器时,服务器会对客户端的 IP 地址进行反解析,获得客户端的域名,再通过客户端的域名对客户端进行 DNS A 正向 IP 地址解析,通过此方法来防止欺骗。

解决方法

方法一:忽略 DNS

1.1 修改 SSH 的配置文件

# vim /etc/ssh/sshd_conf

将以下内容:

......
UseDNS yes
......
GSSAPIAuthentication yes
......

修改为:

......
UseDNS no
......
GSSAPIAuthentication no
......

1.2 让修改的 SSH 配置文件生效

# systemctl restart sshd

方法二:重启 systemd-logind

2.1 重启 dbus

# systemctl restart dbus

2.2 重启 systemd-logind

# systemctl restart systemd-logind

(注意:如果不重启 dbus 直接重启 systemd-logind 则可能会报错)

[内容] Linux 常用日志 (openSUSE & SUSE 版)

1) /var/log/boot.msg,包含系统启动时显示在屏幕上的信息
(补充:当进入系统时,可以同时按下 “ctrl” 键和 “alt” 键和 “f10” 键切换到显示日志的界面,之后可以再通过 KVM 显示系统启动时显示在屏幕上的信息。)
2) /var/log/boot.omsg,包含上一次系统启动时显示在屏幕上的信息
3) /var/log/messages,包含几乎所有日志
4) /var/log/warn,包含 WARNING 也就是级别 4 以上的所有日志
5) /var/log/wtmp,包含和系统登录和重启的所有日志
(补充:可以通过 last 命令读取)
6) /var/log/YaST2/y2log,包含 YaST 的所有日志
7) /var/log/xinetd.log,包含 xinetd 服务的所有日志
8) /var/log/dump/,包含 Kdump 工具在系统宕机时收集的所有故障信息
9) /var/log/atop,包含 Atop 工具收集的系统资源 (CPU、内存、系统进程、IO) 的所有使用信息

[命令] Linux 命令 mtr (检测网络联通状态)

案例一:一直检测某 1 个 IP 地址的联通状态并边检测边显示状况

# mtr -n 8.8.8.8

或者:

# mtr --no-dns 8.8.8.8


补充:
1) 这里以检测 8.8.8.8 IP 地址为例
2) -n 或者 –no-dns 参数代表不使用 DNS 解析主机名

案例二:检测某 1 个 IP 地址 100 次的联通状态并边检测边显示状况

2.1 检测某 1 个 IP 地址 100 次的联通状态并边检测边显示状况 (TCP 加 UDP 版)

# mtr -nc 100 8.8.8.8

或者:

# mtr --no-dns --report-cycles 100 8.8.8.8


补充:
1) 这里以检测 8.8.8.8 IP 地址为例
2) -n 或者 –no-dns 参数代表不使用 DNS 解析主机名
3) -c 或者 –report-cycles 参数代表指定次数

2.2 检测某 1 个 IP 地址 100 次的联通状态并边检测边显示状况 (TCP 版)

# mtr -nTc 100 8.8.8.8

或者:

# mtr --no-dns --tcp --report-cycles 100 8.8.8.8


补充:
1) 这里以检测 8.8.8.8 IP 地址为例
2) -n 或者 –no-dns 不使用 DNS 解析主机名
3) -T 或者 –tcp 指定 TCP 端口
4) -c 或者 –report-cycles 指定次数

2.3 检测某 1 个 IP 地址 100 次的联通状态并边检测边显示状况 (UDP 版)

# mtr -nuc 100 8.8.8.8

或者:

# mtr --no-dns --udp --report-cycles 100 8.8.8.8


补充:
1) 这里以检测 8.8.8.8 IP 地址为例
2) -u 或者 —udp 指定 UDP 端口
3) -n 或者 –no-dns 参数代表不使用 DNS 解析主机名
4) -c 或者 –report-cycles 参数代表指定次数

案例三:检测某 1 个域名 100 次的联通状态并显示最终报告

# mtr -nrc 100 eternalcenter.com

或者:

# mtr --no-dns --report --report-cycles 100 eternalcenter.com


补充:
1) 这里以检测 eternalcenter.com 域名为例
2) -n 或者 –no-dns 参数代表不使用 DNS 解析主机名
3) -r 或者 –report 参数代表生成最终报告
4) -c 或者 –report-cycles 参数代表指定次数

案例四:检测某 1 个域名 TCP 443 端口 100 次的联通状态并显示最终报告

# mtr -TP 443 -nrc 100 eternalcenter.com

或者:

# mtr --tcp --port 443 --no-dns --report --report-cycles 100 eternalcenter.com


补充:
1) 这里以检测 eternalcenter.com 域名的 443 端口为例
2) -n 或者 –no-dns 参数代表不使用 DNS 解析主机名
3) -r 或者 –report 参数代表生成最终报告
4) -c 或者 –report-cycles 参数代表指定次数
5) -T 或者 –tcp 参数代表指定 TCP
6) -P 或者 –port 参数代表指定端口号

[命令] Linux 命令 nc (检查网络端口的联通性)

正文:

案例一:检查某 1 个域名某 1 个 TCP 端口的联通性

# nc -v -z eternalcenter.com 443

或者:

# nc -vz eternalcenter.com 443

(补充:这里以检测 eternalcenter.com 域名的 TCP 443 端口为例)

案例二:检查某 1 个 IP 地址某 1 个 TCP 端口的联通性

# nc -v -z 8.8.8.8 443

或者:

# nc -vz 8.8.8.8 443

(补充:这里以检测 8.8.8.8 IP 地址的 TCP 443 端口为例)

案例三:检查某 1 个域名某 1 个 UDP 端口的联通性

# nc -u -v -z eternalcenter.com 69

或者:

# nc -uvz eternalcenter.com 69

(补充:这里以检测 eternalcenter.com 域名的 UDP 69 端口为例)

案例四:检查某 1 个 IP 地址某 1 个 UDP 端口的联通性

# nc -u -v -z 8.8.8.8 69

或者:

# nc -uvz 8.8.8.8 69

(补充:这里以检测 8.8.8.8 IP 地址的 UDP 69 端口为例)

案例五:人为占用本地系统的 1 个端口

# nc -l -k 443

或者:

# nc -lk 443

(补充:这里以人为占用本地系统的 443 端口为例)

(补充链接:System local ports batch occupation

参考文献:

https://nmap.org