SSH 登录延迟 10 秒以上的排查步骤

最近在维护服务器时,遇到了一个让人头疼的问题:SSH 登录时总要等待 10 秒以上才能进入系统。这种延迟不仅影响工作效率,还可能隐藏着更深层的系统问题。经过一番折腾,我总结出了一套完整的排查流程,在这里分享给大家。
1. 开启 SSH 调试模式
首先,我们需要确认问题确实出在 SSH 连接阶段。使用 -v 参数开启详细日志输出:
ssh -v username@server_ip
观察输出中卡在哪一步,这能帮我们快速定位问题方向。我就是在这一步发现卡在了 GSSAPI 认证环节。
2. 检查 DNS 反向解析
SSH 服务默认会尝试对客户端 IP 进行反向 DNS 解析,如果解析超时就会造成延迟。临时禁用这个功能测试:
sudo vim /etc/ssh/sshd_config
找到并修改以下配置:
UseDNS no
保存后重启 SSH 服务:
sudo systemctl restart sshd
这个简单的修改就解决了我遇到的大多数延迟问题。
3. 禁用 GSSAPI 认证
如果问题依旧,很可能是 GSSAPI 认证超时。在客户端 SSH 配置中禁用:
vim ~/.ssh/config
添加以下内容:
Host *
GSSAPIAuthentication no
或者在服务端直接禁用:
sudo vim /etc/ssh/sshd_config
GSSAPIAuthentication no
4. 检查 PAM 模块配置
PAM 模块的某些配置也会导致延迟,特别是 pam_limits.so 和 pam_env.so。检查 PAM 配置:
sudo vim /etc/pam.d/sshd
我曾遇到 pam_limits.so 读取大型配置文件导致的延迟,通过优化配置解决了问题。
5. 排查网络和防火墙
网络问题不容忽视。使用 tcpdump 抓包分析:
sudo tcpdump -i any port 22
同时检查防火墙规则,确保没有异常的连接限制:
sudo iptables -L
6. 检查系统资源状态
系统负载过高也会影响 SSH 响应速度:
top
free -h
df -h
确保系统有足够的 CPU、内存和磁盘空间。
实战经验总结
经过这些步骤的排查,我的 SSH 延迟问题最终定位在 GSSAPI 认证和 DNS 反向解析上。建议按照顺序逐一排查,通常能在前三个步骤中找到问题。记得每次修改配置后都要重启 SSH 服务,并在生产环境修改前做好备份。
希望这篇教程能帮你快速解决 SSH 登录延迟的问题。如果还有其他发现,欢迎在评论区分享你的经验!


SSH延迟太折磨人了,按这步骤试了UseDNS no立马好了!