ECS 远程 SSH 登录失败排查实战:从超时、拒绝到认证失败的四层流程
云服务器 ECS 上最让人心慌的故障之一,就是 SSH 突然连不上。报错形式很多:Connection timed out、Connection refused、Permission denied,每一种背后的原因都不同。本文整理一套我常用的排查顺序,按“网络是否通、端口是否开、服务是否活、认证是否对”逐层缩小范围,每一步都能直接执行。
一、先看报错类型,别急着重启
用 ssh -v 连接,可以看到卡在哪一步:
ssh -v root@<弹性公网IP>
三种典型现象对应的方向:Connection timed out 说明包根本没到达或没回来,重点查安全组、网络ACL、公网IP与本地网络;Connection refused 说明包到了,但 22 端口没有进程监听或被防火墙拒绝;Permission denied 说明链路和服务都正常,问题出在密钥、密码或 sshd 配置。先判断类型,能省掉一半弯路。
二、网络层:安全组与网络ACL
超时的最常见原因是安全组入方向没有放通 22 端口,或者源地址写成了旧的办公网出口 IP。进入控制台,打开该实例的安全组,确认入方向规则包含 TCP 22,源地址覆盖你当前的出口 IP。临时排查可以把源地址设为你自己的公网地址,不要为了省事直接放开 0.0.0.0/0 后忘记收回。如果子网还绑定了网络ACL,也要检查 ACL 的入、出两个方向,因为 ACL 是无状态的,回程流量同样需要放行。
在本地可以先用 nc 或 telnet 验证端口是否可达:
nc -vz <弹性公网IP> 22
三、服务层:sshd 是否在运行
如果是 Connection refused,需要从控制台用 VNC 远程登录进入实例,检查服务状态:
systemctl status sshd ss -lntp | grep :22 journalctl -u sshd --since "30 min ago"
sshd 没运行就先启动并设置开机自启。启动失败时,日志里通常会写明原因,比如配置文件语法错误、主机密钥文件权限不对、磁盘已满无法写入。修改过 sshd_config 的话,改完先用 sshd -t 检查语法,再重启服务,避免把自己锁在门外。同时检查系统内的防火墙:
firewall-cmd --list-all iptables -S | head -20
云上经常出现“安全组放通了,但系统内 firewalld 或 iptables 仍然拒绝”的情况,两层都要看。
四、认证层:密钥、密码与 sshd 配置
Permission denied 时,先确认用户名是否正确,不同镜像的默认用户并不一样。使用密钥登录时,本地私钥文件权限必须是 600,服务器上 ~/.ssh 目录应为 700,authorized_keys 为 600,属主必须是该用户本人,否则 sshd 会直接忽略。排查命令:
ls -ld ~ ~/.ssh ~/.ssh/authorized_keys grep -E "PermitRootLogin|PasswordAuthentication|PubkeyAuthentication" /etc/ssh/sshd_config tail -50 /var/log/secure
日志里出现 Authentication refused: bad ownership or modes,就是权限问题;出现 Failed password 反复刷屏,则要警惕暴力破解。后者建议改用密钥登录、关闭密码认证,并限制允许登录的源地址。
五、事后加固与自查清单
问题解决后,建议把下面几条固化下来:安全组按最小范围放通,并给规则写好备注;使用密钥登录,禁用 root 密码登录;修改 sshd 配置前保留一个已登录的会话窗口;在云监控中为 CPU、内存和磁盘配置告警;定期备份 authorized_keys 和 sshd_config。遇到连不上的情况,按“报错类型、安全组与ACL、sshd 服务、认证权限”逐层走一遍,大多数问题都能在十几分钟内定位。
- 点赞
- 收藏
- 关注作者
评论(0)