[排错] 解决 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 命令 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

[命令] Rocky Linux 8 & RHEL 8 命令 update-crypto-policies (设置连接加密方式)

内容一:update-crypto-policies 参数的意义

1) DEFAULT 不严格的安全等级,可以让系统使用 TLSv1.2
2) FUTURE 严格的安全等级,只能让系统使用 TLSv1.2 不能使用 TLSv1.3

内容二:显示当前的 update-crypto-policies 参数

# update-crypto-policies --show
DEFAULT

或者:

# cat /etc/crypto-policies/state/current
DEFAULT:DEFAULT

(补充:从这里可以看出目前的 update-crypto-policies 参数是 DEFAULT)

内容三:设置 update-crypto-policies 参数

# update-crypto-policies --set=FUTURE

或者:

# update-crypto-policies --set FUTURE

(补充:这里以将 update-crypto-policies 参数设置为 FUTURE 为例)

[排错] 解决 Linux 执行 curl 命令时报错 “curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure”

报错代码

curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure

分析

Rocky Linux 8 & RHEL 8 已经默认废弃 TLSv1.2
可以使用 TLSv1.3 替代 TLSv1.2 或者将 update-crypto-policies 参数设置为 DEFAULT 以解决此报错

解决方法

步骤一:显示当前的 update-crypto-policies 参数

# update-crypto-policies --show
FUTURE

(补充:从这里可以看出目前的 update-crypto-policies 参数是 FUTURE)

步骤二:将 update-crypto-policies 参数设置为 DEFAULT

# update-crypto-policies --set=DEFAULT

(补充:这里以将 update-crypto-policies 参数设置为 DEFAULT 为例)