SSH 连接服务器失败:从报错到恢复的排查手册
SSH 连接服务器失败:从报错到恢复的排查手册
SSH 连不上服务器,是运维和开发最常遇到的故障之一。报错信息五花八门,但排查有固定顺序:先确认网络通不通,再确认服务在不在,最后才是认证和配置问题。按这个顺序走,大多数连接失败十分钟内能定位。
一、先看报错,再动手
连接失败时,客户端一般会给出明确的报错,先把报错原文记下来:
ssh user@服务器 IP
常见报错分三类:
- Connection timed out:网络不通,请求根本没到服务器。
- Connection refused:网络到了服务器,但 22 端口没人监听。
- Permission denied (publickey,password):网络和服务都正常,卡在认证环节。
报错类型不同,排查方向完全不同,先定方向再动手。
二、网络不通:Connection timed out
超时说明数据包没到服务器,或者服务器的回包没回来。逐段验证:
ping 服务器 IP
telnet 服务器 IP 22
ping 不通,先看本地网络和服务器是否开机;ping 通但 telnet 22 端口不通,问题出在端口和防火墙这一层。依次检查:
- 安全组 / 防火墙放行:云服务器要在安全组里放行 22 端口入方向,源地址别写错。本地防火墙和公司出口防火墙也可能拦截出站的 22 端口。
- 服务器公网 IP 是否变了:弹性 IP 释放重绑、实例重建后,旧 IP 就连不上了,先在控制台核对当前公网 IP。
- 服务器是否正常运行:控制台看实例状态是不是运行中,异常关机、欠费停机都会导致超时。
三、端口无监听:Connection refused
Connection refused 说明网络到了,但目标端口没有服务在监听:
# 在服务器本地检查(通过控制台 VNC 或其他通道登录)
ss -tlnp | grep 22
systemctl status sshd
可能的原因:
- sshd 服务没起来:系统更新、配置改错后重启失败都可能导致 sshd 挂掉。用
systemctl restart sshd重启,再用systemctl status sshd确认状态。 - sshd 监听了别的端口:配置文件里
Port被改成非 22 端口,客户端按默认 22 连接就会被拒绝。核对/etc/ssh/sshd_config里的Port配置,连接时用ssh -p 端口指定。 - sshd 配置错误:改完
sshd_config后没执行sshd -t检查语法,配置报错导致服务起不来。改配置前先测语法,确认无误再重启服务。
四、认证失败:Permission denied
网络通、服务在,输密码或密钥后被拒绝,问题在认证环节:
1. 密码登录被禁
很多云服务器默认关闭密码登录,只允许密钥登录。检查服务端配置:
grep PasswordAuthentication /etc/ssh/sshd_config
如果是 no,要么改成 yes 后重启 sshd,要么改用密钥登录。
2. 密钥不对或权限不对
密钥登录失败最常见的原因其实是文件权限。服务端对权限很敏感:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
authorized_keys 权限太开放会被 sshd 直接忽略。另外确认公钥确实写进了服务器上对应用户的 authorized_keys,一行一个、没有断行或多余空格。
3. 用户名或密钥文件用错
客户端要确认两点:一是用户名对不对,云服务器默认用户可能是 root、ec2-user、ubuntu 等,不同镜像不一样;二是 -i 指定的私钥文件对不对:
ssh -i ~/.ssh/id_rsa user@服务器 IP
换了电脑、换了密钥对,旧私钥自然登不上。拿不准时加 -v 看详细握手过程:
ssh -v user@服务器 IP
-v 输出里会显示尝试了哪些密钥、服务端接受了哪种认证方式,是定位认证问题的利器。
五、其他常见报错
- WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED:服务器重装后主机密钥变了,客户端
known_hosts里还是旧记录。确认是自己的服务器重装所致后,删除旧记录再连:ssh-keygen -R 服务器 IP。 - Host key verification failed:同上,主机密钥校验失败,同样先确认服务器身份,再更新
known_hosts。 - Too many authentication failures:客户端尝试了太多密钥,服务端拒绝。指定正确的密钥文件:
ssh -i 密钥文件,或者在~/.ssh/config里为这台主机固定IdentityFile。
六、一个可复用的排查顺序
- 看报错原文,定方向:超时、拒绝还是认证失败。
ping和telnet验证网络与端口。- 安全组、公网 IP、实例状态逐项核对。
- 服务端
systemctl status sshd、ss -tlnp确认服务与监听。 sshd -t检查配置语法,PasswordAuthentication和密钥权限逐项核对。- 拿不准就加
-v看握手细节。
小结
SSH 连不上的排查就三条线:网络通不通、服务在不在、认证对不对。先看报错定方向,再逐段验证,多数问题十分钟内能定位。改配置前先备份 sshd_config,改完先 sshd -t 再重启——连不上时手里至少要留一条控制台 VNC 通道做兜底。
- 点赞
- 收藏
- 关注作者
评论(0)