安全组放行了22端口只是排除了最外层的原因。针对ECS重启后突然连不上SSH的情况,建议按照以下“从外到内”的顺序进行深度排查:
🌐 第一步:精准定位网络层(区分超时与拒绝)
在本地终端执行 telnet <ECS公网IP> 22 或 nc -vz <ECS公网IP> 22 测试端口连通性:
连接超时 (Timeout):说明网络不通。除了安全组,还需检查VPC的网络ACL是否拦截了入站流量,或者本地网络/运营商是否封禁了22端口出站。
连接被拒绝 (Connection refused):说明网络已通,但服务器内部没有服务在监听,问题出在系统内部。
🛡️ 第二步:排查安全组与云盾拦截
多安全组冲突:一个ECS可关联多个安全组。如果安全组A放行了22端口,但安全组B设置了拒绝22端口的规则,拒绝规则会优先生效。
云安全中心自动封禁:如果ECS开启了云安全中心,频繁的SSH登录失败可能触发了防暴力破解策略,导致你的本地IP被自动加入了黑名单。
⚙️ 第三步:通过VNC登录排查系统内部(核心)
如果网络层没问题,请通过阿里云控制台的 VNC远程连接 登录服务器,依次执行以下检查:
检查SSH服务状态
执行systemctl status sshd。如果服务未启动(inactive),尝试执行systemctl start sshd并查看报错信息。检查端口监听情况
执行ss -tlnp | grep sshd或netstat -ntlp | grep sshd。确认sshd是否真的在监听22端口,或者是否被修改成了其他端口。检查系统内部防火墙
操作系统自带的防火墙可能拦截了连接。firewalld:执行
firewall-cmd --list-all查看是否放行了22端口。iptables:执行
iptables -L INPUT -n查看是否有DROP或REJECT规则。ufw (Ubuntu):执行
ufw status查看状态。检查SSH配置文件
查看/etc/ssh/sshd_config文件,重点检查以下参数:Port:是否被修改。PermitRootLogin:如果设置为no,则禁止root用户登录。PasswordAuthentication:如果设置为no,则禁止密码登录(只能用密钥)。AllowUsers/DenyUsers:检查是否配置了用户白名单或黑名单限制。修改配置后,务必执行
sshd -t验证语法,无误后再重启服务。
💻 第四步:检查系统资源与日志
资源耗尽:执行
df -h检查磁盘空间。如果根目录或/var目录被写满,SSH服务可能无法正常启动或响应。同时检查CPU和内存是否因OOM(内存溢出)导致服务卡死。查看安全日志:查看
/var/log/secure(CentOS/RHEL)或/var/log/auth.log(Ubuntu/Debian),日志中通常会记录SSH连接被拒绝的具体原因(如认证失败、配置错误等)。
🔑 第五步:检查客户端与密钥权限
密钥权限:如果使用密钥登录,确保本地私钥文件权限为
600或400。Host Key变更:如果ECS重装过系统,本地可能会提示
Host key verification failed。需在本地执行ssh-keygen -R <ECS公网IP>清除旧指纹后重试。
建议先从第一步的 telnet 测试开始,根据返回结果(超时还是拒绝)快速缩小排查范围。