SSH 连接服务器失败:从报错到恢复的排查手册

举报
yd_282937315 发表于 2026/11/09 11:42:10 2026/11/09
【摘要】 SSH 连接服务器失败:从报错到恢复的排查手册SSH 连不上服务器,是运维和开发最常遇到的故障之一。报错信息五花八门,但排查有固定顺序:先确认网络通不通,再确认服务在不在,最后才是认证和配置问题。按这个顺序走,大多数连接失败十分钟内能定位。 一、先看报错,再动手连接失败时,客户端一般会给出明确的报错,先把报错原文记下来:ssh user@服务器 IP常见报错分三类:Connection t...

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 端口不通,问题出在端口和防火墙这一层。依次检查:

  1. 安全组 / 防火墙放行:云服务器要在安全组里放行 22 端口入方向,源地址别写错。本地防火墙和公司出口防火墙也可能拦截出站的 22 端口。
  2. 服务器公网 IP 是否变了:弹性 IP 释放重绑、实例重建后,旧 IP 就连不上了,先在控制台核对当前公网 IP。
  3. 服务器是否正常运行:控制台看实例状态是不是运行中,异常关机、欠费停机都会导致超时。

三、端口无监听:Connection refused

Connection refused 说明网络到了,但目标端口没有服务在监听:

# 在服务器本地检查(通过控制台 VNC 或其他通道登录)
ss -tlnp | grep 22
systemctl status sshd

可能的原因:

  1. sshd 服务没起来:系统更新、配置改错后重启失败都可能导致 sshd 挂掉。用 systemctl restart sshd 重启,再用 systemctl status sshd 确认状态。
  2. sshd 监听了别的端口:配置文件里 Port 被改成非 22 端口,客户端按默认 22 连接就会被拒绝。核对 /etc/ssh/sshd_config 里的 Port 配置,连接时用 ssh -p 端口 指定。
  3. 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。

六、一个可复用的排查顺序

  1. 看报错原文,定方向:超时、拒绝还是认证失败。
  2. ping 和 telnet 验证网络与端口。
  3. 安全组、公网 IP、实例状态逐项核对。
  4. 服务端 systemctl status sshd、ss -tlnp 确认服务与监听。
  5. sshd -t 检查配置语法,PasswordAuthentication 和密钥权限逐项核对。
  6. 拿不准就加 -v 看握手细节。

小结

SSH 连不上的排查就三条线:网络通不通、服务在不在、认证对不对。先看报错定方向,再逐段验证,多数问题十分钟内能定位。改配置前先备份 sshd_config,改完先 sshd -t 再重启——连不上时手里至少要留一条控制台 VNC 通道做兜底。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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