SSH 登录 ECS 每次卡 30 秒?关闭 GSSAPI 与 DNS 反查加速实战
【摘要】 前段时间给一台华为云 ECS 配环境,遇到个很折磨人的问题:每次 ssh 登录,都要卡住二三十秒才弹出密码提示。ping 延迟只有几毫秒,网络明明没问题,这种"假卡顿"最让人抓狂。今天把排查和解决过程记录下来。 一、先定位卡在哪一步给 ssh 加上 -v 看详细握手过程:ssh -v root@x.x.x.x输出里可以看到,在 Authentications that can continu...
前段时间给一台华为云 ECS 配环境,遇到个很折磨人的问题:每次 ssh 登录,都要卡住二三十秒才弹出密码提示。ping 延迟只有几毫秒,网络明明没问题,这种"假卡顿"最让人抓狂。今天把排查和解决过程记录下来。
一、先定位卡在哪一步
给 ssh 加上 -v 看详细握手过程:
ssh -v root@x.x.x.x
输出里可以看到,在 Authentications that can continue 之前停顿很久;登录成功后、出现 shell 提示符之前还会再卡一次。这两个停顿,分别对应两个默认开启的"拖油瓶"。
二、元凶一:GSSAPI 认证
/etc/ssh/sshd_config 里默认是这样的:
GSSAPIAuthentication yes
服务端会尝试做 GSSAPI(Kerberos)认证协商,而我们根本没有 Kerberos 环境,客户端和服务端就在这里反复试探、等超时。直接关掉:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo sed -i 's/^GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config
三、元凶二:UseDNS 反向解析
默认 UseDNS yes,sshd 会对登录来源 IP 做反向 DNS 解析。云上内网 IP 往往没有 PTR 记录,解析只能干等超时:
sudo sed -i 's/^#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
sudo sed -i 's/^UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
grep -E '^(GSSAPIAuthentication|UseDNS)' /etc/ssh/sshd_config
确认输出是:
GSSAPIAuthentication no
UseDNS no
四、检查配置并重启
改 sshd 配置前务必先做语法检查,并且不要断开当前会话,另开一个终端验证:
sudo sshd -t && echo "语法 OK"
sudo systemctl restart sshd
然后新开终端计时登录:
time ssh -o PreferredAuthentications=password root@x.x.x.x "exit"
我这台机器从原来的 32 秒降到了 2 秒以内,效果立竿见影。
五、几点注意事项
- 改配置前先备份,改完 sshd -t 检查,重启后务必用新会话验证通过再关闭老会话,避免把自己锁在门外。
- UseDNS no 之后,/var/log/secure 里的登录日志只记录 IP、不再反解主机名,排查时心里有数即可。
- 密钥登录同样适用,这两个选项和认证方式无关。
- 安全组、网络 ACL 不用动,这纯属服务端本机行为。
小结
SSH 登录慢但网络正常,优先怀疑 GSSAPI 和 UseDNS 这两个默认项。两行配置、一次重启,登录从 30 秒回到 2 秒。这种"默认配置坑"在云服务器上特别常见,记下来,下次开新机器直接照着改。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)