最近在使用阿里云美国地域的ECS时遇到一个SSH连接问题。
服务器之前一直可以正常通过SSH登录,但在控制台执行重启后,突然无法连接,SSH客户端一直提示连接超时。
目前已经做过以下检查:
目前比较疑惑的是,既然安全组22端口已经放行,还有哪些地方可能导致SSH超时?
是否需要继续检查服务器内部防火墙、sshd服务状态、网卡配置、路由、iptables/firewalld,或者系统启动后网络服务没有正常起来?
如果不能直接SSH登录,有没有办法通过阿里云控制台进一步确认是系统内部问题还是公网网络问题?想请教一下比较完整的排查顺序。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
既然安全组已经确认放行,且实例处于运行状态,那么排查的重心需要从“云端网络层”转移到“实例内部系统层”。
官方解决方案:https://help.aliyun.com/zh/ecs/sshd-configuration-error-cannot-connect-remotely-ecs-how-should-solve?source=5176.29345612&userCode=e6tbwq9f
针对你的情况,以下是完整的排查顺序和具体操作建议:
本地端口连通性测试(界定故障边界)
在继续深入排查前,先在本地电脑测试一下端口是否真的不通,这能帮你快速区分是网络问题还是服务问题:
Windows PowerShell:执行 Test-NetConnection <公网IP> -Port 22
macOS / Linux:执行 nc -vz <公网IP> 22
判断逻辑:
如果提示连接超时:说明流量在到达实例前被拦截,重点排查本地网络出口、运营商限制或 VPC 网络 ACL。
如果提示连接被拒绝 (Connection refused):说明网络已通,但实例内部的 SSH 服务未启动或未监听 22 端口。
通过 VNC 登录实例进行内部排查
既然 SSH 连不上,你需要通过阿里云控制台的 VNC 远程连接(或 Workbench)进入系统内部。登录后,按以下顺序检查:
检查 SSH 服务状态:
执行 systemctl status sshd(部分系统如 Ubuntu 可能是 ssh)。如果服务未运行,尝试执行 sudo systemctl start sshd 启动,并查看是否有报错信息。
检查端口监听情况:
执行 ss -tlnp | grep :22 或 netstat -tlnp | grep :22。确认 SSH 服务是否正在监听 22 端口,且监听地址是 0.0.0.0:22 而不是 127.0.0.1:22(后者仅允许本地访问)。
检查系统内部防火墙:
安全组放行不代表系统防火墙也放行了。
firewalld:执行 sudo firewall-cmd --list-all 查看是否包含 ssh 或 22/tcp。
iptables:执行 sudo iptables -L INPUT -n 查看是否有 DROP 或 REJECT 规则拦截了 22 端口。
UFW(Ubuntu/Debian):执行 sudo ufw status。
检查 SSH 配置文件:
查看 /etc/ssh/sshd_config 文件,重点确认以下参数:
Port 是否仍为 22。
PermitRootLogin 是否允许 root 登录(如果你是用 root 登录的话)。
PasswordAuthentication 或 PubkeyAuthentication 是否与你使用的登录方式匹配。
修改配置后,务必先执行 sudo sshd -t 检查语法,确认无误后再重启服务。
检查 VPC 网络 ACL(进阶排查)
如果你的 ECS 实例位于 VPC 网络中,且上述内部检查均正常,那么问题可能出在子网级别的 网络 ACL 上。
网络 ACL 的优先级高于安全组。如果 VPC 交换机绑定了网络 ACL,且入方向规则中显式拒绝了 22 端口,那么即使安全组放行,流量也会被拦截。
你可以在 VPC 控制台检查对应交换机关联的网络 ACL 规则。
检查系统资源与启动项
磁盘空间:执行 df -h 检查根目录 / 是否已满。磁盘写满会导致 SSH 服务无法写入日志或创建临时文件,从而无法正常工作。
系统日志:查看 /var/log/secure 或 /var/log/auth.log(Ubuntu/Debian),以及 journalctl -u sshd,寻找 SSH 服务启动失败或连接被拒绝的具体原因。
总结建议:
优先使用 VNC 登录,确认 sshd 服务是否正常运行以及系统防火墙是否拦截。这是重启后 SSH 失效最常见的原因。如果内部一切正常,再回头检查 VPC 网络 ACL 和本地网络环境。
你重启前有没有对服务器做过配置变更?比如改过端口、重装过系统或清理过防火墙规则?
如果安全组已经放行22端口,但SSH还是提示 Connection timed out,就不要只盯着安全组了。
本文由 云国际站代理商『云老大 飞弟:@yunlaoda360 / YunLaoDa-服务器服务商•撰写』如需转载请注明!
尤其是“重启前正常、重启后突然连不上”,建议优先检查这几个地方:
确认ECS公网IP没有变化,同时检查安全组22端口的来源地址是不是当前电脑的公网IP。
可以本地测试:
nc -vz 服务器公网IP 22
如果SSH进不去,可以先通过阿里云ECS控制台远程连接进入服务器,然后执行:
systemctl status sshd
ss -lntp | grep :22
如果sshd没启动,可以尝试:
systemctl restart sshd
再检查SSH配置:
sshd -t
重启后突然SSH超时,很可能是防火墙规则重新加载。
iptables -L -n
或者:
firewall-cmd --list-all
重点确认22端口和当前客户端IP没有被拦截。
ip addr
ip route
确认网卡正常、私网IP正常,并且存在默认路由。
Connection timed out:优先查防火墙、网卡、路由
Connection refused:优先查sshd和22端口监听
Permission denied:优先查用户名、密码、密钥和SSH认证配置
就这个场景来说,我会优先执行:
systemctl status sshd
ss -lntp | grep :22
iptables -L -n
ip addr
ip route
这几条基本就能快速判断问题是在SSH服务、系统防火墙,还是网络配置。