云服务器 SSH 登录突然变慢?从网络到认证的排查顺序

举报
yd_275727902 发表于 2026/10/31 10:17:35 2026/10/31
【摘要】 SSH 连云服务器平时一两秒进得去,突然变成卡住十几秒甚至半分钟,最影响心情。多数情况不是“机器坏了”,而是 DNS、反向解析、鉴权模块或资源争用某个环节拖了后腿。下面按“先外后内、先快后慢”的顺序排查,命令在 EulerOS、CentOS、Ubuntu 上基本通用。一、先分清慢在哪一段用详细模式连一次,看卡在哪一行: ssh -vvv user@你的服务器IP对照输出大致分段:停在 Con...

SSH 连云服务器平时一两秒进得去,突然变成卡住十几秒甚至半分钟,最影响心情。多数情况不是“机器坏了”,而是 DNS、反向解析、鉴权模块或资源争用某个环节拖了后腿。下面按“先外后内、先快后慢”的顺序排查,命令在 EulerOS、CentOS、Ubuntu 上基本通用。

一、先分清慢在哪一段

用详细模式连一次,看卡在哪一行:

 ssh -vvv user@你的服务器IP

对照输出大致分段:

  • 停在 Connecting to ...:网络到不了,或安全组/防火墙拦了 22 端口。

  • 停在 Authenticating to ... 或 Offering public key 很久:认证侧慢(密钥试错、GSSAPI、PAM、LDAP)。

  • 认证通过后还要等很久才出 shell:用户登录脚本、motd、家目录 NFS、磁盘 IO 问题。

也可以先测纯网络延迟,排除“整条链路都卡”:

 ping -c 5 服务器IP
 tcptraceroute 服务器IP 22   # 没有该命令可用 mtr -T -P 22 服务器IP

云厂商控制台里看一下弹性公网 IP、安全组入站是否仍放行 TCP 22,以及是否换过带宽或做了流量清洗。

二、反向 DNS:最常见的“无声等待”

sshd 默认会尝试对客户端 IP 做反向解析。若云上 PTR 记录缺失或 DNS 超时,登录就会空等数秒到几十秒。

在服务器上看配置:

 grep -E '^(UseDNS|GSSAPIAuthentication)' /etc/ssh/sshd_config

建议生产环境明确关掉不必要的解析和票据协商:

 # /etc/ssh/sshd_config
 UseDNS no
 GSSAPIAuthentication no

改完校验并重载:

 sshd -t && systemctl reload sshd
 # Ubuntu 上服务名可能是 ssh
 # sshd -t && systemctl reload ssh

客户端侧若公司内网 DNS 很慢,可在本机 ~/.ssh/config 对该主机写:

 Host myserver
    HostName 服务器IP
    User yourname
    GSSAPIAuthentication no

用 IP 直连而不是依赖容易抖动的域名,也能少一层解析。

三、认证试错:密钥太多、顺序不对

ssh -vvv 里如果反复出现 Offering public key 再失败,说明客户端在一把一把试本地密钥。agent 里钥匙一多,服务器端 MaxAuthTries 还没到,时间已经被耗掉了。

本机清理或指定密钥:

 ssh-add -l
 ssh -i ~/.ssh/id_ed25519_云服务器 user@服务器IP

在 ~/.ssh/config 里为该主机写死:

 IdentitiesOnly yes
 IdentityFile ~/.ssh/id_ed25519_云服务器

服务器端可适当收紧并打开认证日志,方便以后对照:

# /etc/ssh/sshd_config
PubkeyAuthentication yes
PasswordAuthentication no # 确认密钥可用后再关密码
MaxAuthTries 4
LogLevel VERBOSE

重载后用 journalctl -u sshd -n 50 --no-pager(Ubuntu 用 ssh)看是哪把 key 被拒。

四、PAM、会话脚本和家目录

认证已成功但迟迟不出提示符时,查登录链路:

# 临时看 PAM 相关日志
journalctl -u sshd -n 100 --no-pager
tail -n 50 /var/log/secure # EulerOS/CentOS
tail -n 50 /var/log/auth.log # Ubuntu

常见拖慢点:

  1. ~/.bashrc / /etc/profile.d/*.sh 里有联网命令、慢的 curl、或挂死的补全脚本。用非交互排查:

ssh user@服务器IP 'echo ok; time true'
ssh -T user@服务器IP 'echo no-pty'

若 -T 很快而普通登录很慢,问题多半在交互式 shell 初始化。

  1. motd / update-motd 每次登录拉系统信息(Ubuntu 较常见):

ls /etc/update-motd.d/
# 可暂时 chmod -x 可疑脚本做对比,确认后再决定是否保留
  1. 家目录在 NFS/远程盘上且存储抖动:df -h ~、time ls ~ 一看便知。云盘突发性能用尽时,连读一个小文件都会卡。

五、资源争用:CPU、内存、磁盘、inode

SSH 守护进程本身很轻,但机器负载打满时,新建会话会被调度拖慢:

uptime
free -h
df -h
df -i
iostat -xz 1 5 # sysstat 包
systemd-cgtop # 看哪个 slice 在抢资源

重点看:

  • load 长期高于 CPU 核数、kswapd 狂跑:内存吃紧,先杀泄漏进程或扩容。

  • 根分区或 /var 100%:日志爆满会导致认证写日志都阻塞。

  • inode 用尽(df -i):小文件过多时表现为“还能 ping、SSH 却异常慢或失败”。

云主机还要看是否被邻居吵闹或触发了超卖限流;华为云等控制台里的监控(CPU、磁盘读写、入出向带宽)能快速排除“整机被打满”这类情况。

六、防火墙与连接跟踪

安全组放行了,本机防火墙仍可能对新建连接做额外检查。连接跟踪表满时,表现为偶发连不上或握手极慢:

# firewalld
firewall-cmd --list-all
# iptables / nftables 连接跟踪
sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max
dmesg | grep -i conntrack

若 count 长期逼近 max,调高 nf_conntrack_max 并排查谁在打短连接;同时确认 fail2ban / 云 WAF 没有把你的办公出口 IP 临时封禁。

七、一套最小复现与固化清单

按这个顺序走,通常十分钟内能定位:

  1. ssh -vvv 分清卡在网络、认证还是 shell 初始化。

  2. 服务器关掉 UseDNS、GSSAPIAuthentication,sshd -t 后 reload。

  3. 客户端 IdentitiesOnly + 指定一把密钥,避免盲试。

  4. 非交互 ssh host 'echo ok' 对比,排除 bashrc/motd。

  5. 查 uptime/free/df -i/iostat,排除资源打满。

  6. 查 conntrack、fail2ban、安全组,排除网络策略。

把确认有效的 sshd_config 片段纳入配置管理(Ansible/云初始化脚本),新机器出厂即关闭反向 DNS 和 GSSAPI,以后就很少再被“突然变慢”骚扰。排查时一次只改一处并留下变更记录,避免把安全收紧和性能优化搅在一起难回滚。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。