SSH 连不上服务器,80% 的问题出在四个地方:密码错误、端口被封、密钥没配对、防火墙拦了。按顺序排查,十分钟内能找到根源。
先确认问题在哪一段
SSH 连不上,先要判断是”你自己电脑的问题”还是”服务器端的问题”,两个方向的排查方法完全不同。
最简单的判断方式:用 ping 和 telnet 做基础检测。
在你本地终端执行:
ping 你的服务器IP
telnet 你的服务器IP 22
ping 不通——说明网络层有问题,可能是 IP 填错了、服务器宕机了、或者网络本身不通。ping 通但 telnet 22 端口不通——说明 TCP 层有问题,端口被封或者服务没开。ping 和 telnet 都通但 SSH 客户端报错——说明问题在 SSH 协议层,可能是密钥、配置或认证问题。
按这个顺序缩小范围,能省掉大量无效操作。
原因一:密码错了或账号填错
这是最常见的 SSH 连不上的原因,但也是最容易被忽略的——因为很多人不愿意相信自己会填错。
常见错误包括:root 和 ubuntu 用混了,默认用户名每个系统不同;复制密码时多了前后空格,粘贴进去看起来一样但实际不对;在终端里输入密码时光标不移动,你以为没输入实际上已经输入了;端口号填错,尤其是从默认 22 改过端口之后。
怎么确认:登录云控制台的 VNC/Web Console(这个不依赖 SSH,可以直接进服务器),然后查看登录记录:
tail -n 20 /var/log/auth.log
如果看到 “Failed password”,说明是密码问题。解决方式是在控制台用 passwd 命令重置密码,或者确认用户名是否正确。
原因二:端口 22 被封或端口改了
国内部分运营商会封锁 22 端口——这不是服务器端的问题,是你本地的网络出口在过滤。如果你在公司网络或学校网络下经常连不上,换一个网络(手机 4G 热点)试试。
另一个常见情况:服务器端把 SSH 端口从默认的 22 改成了其他端口(比如 2222),但你本地客户端还在用 22,导致连不上。
解决方法:用 telnet 测一下常用端口:
telnet 服务器IP 22
telnet 服务器IP 2222
哪个端口有响应,就用哪个端口连。或者登录控制台查看 /etc/ssh/sshd_config 里 Port 字段的值。
原因三:SSH 密钥没有配对
如果你用的是密钥登录,连不上很可能是因为公钥私钥没配对。
先确认本地私钥文件是否存在且权限正确:
ls -la ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
私钥权限必须是 600,否则 SSH 客户端会拒绝使用。
然后确认服务器端 ~/.ssh/authorized_keys 文件里有你的公钥内容。可以用这个命令查看本地公钥:
cat ~/.ssh/id_rsa.pub
把这个内容复制到服务器 ~/.ssh/authorized_keys 文件里(每行一个公钥),保存后权限设为 600,再重启 sshd:
chmod 600 ~/.ssh/authorized_keys
sudo systemctl restart sshd
如果不确定是不是密钥问题,先临时切换到密码登录试试:在服务器 /etc/ssh/sshd_config 里把 PasswordAuthentication yes 打开,重启 sshd 后用密码登录测试,能登录就说明是密钥问题。
原因四:防火墙拦了
服务器端防火墙是拦 SSH 的重灾区,排查顺序建议是:本地防火墙 → 服务器防火墙 → 云平台安全组。
先看服务器端防火墙状态:
# Ubuntu/Debian
sudo ufw status
# CentOS
sudo firewall-cmd --list-all
如果看到 22 端口在 deny 列表里,放行它:
sudo ufw allow 22
sudo systemctl restart sshd
原因五:云平台安全组没放行
这是新手最容易忽略的原因,也是最难发现的原因。服务器在云平台上运行,除了服务器内部的防火墙,还有一个云平台层的安全组策略,很多人是栽在这里的。
不同云平台的安全组配置位置不同:
阿里云:ECS 控制台 → 实例 → 安全组 → 配置规则。腾讯云:云服务器控制台 → 防火墙规则。AWS:EC2 → 安全组 → 入站规则。萤光云:控制台 → 防火墙/安全组。
标准操作是:添加入站规则,允许 TCP 22 端口从 0.0.0.0/0(或者你的 IP)访问。放行后等 1-2 分钟生效,不要立刻重试。
原因六:服务商封了 IP 或端口
如果你发现 ping 通但 22 端口不通,换了一个网络(比如手机开热点)发现能连,说明是你的本地 IP 被服务器端封了。这种情况常见于共享 IP 段被滥用,或者端口扫描触发了服务商的自动封禁机制。
解决方法:联系服务商更换 IP,或者在云控制台查看是否有 IP 被封的状态提示。如果是云服务器,大多数平台提供免费换 IP 的选项。
原因七:SSH 服务没启动或崩溃了
极端情况下,服务器负载过高或者被人打爆了,SSHD 进程可能无响应或者崩溃。这种情况下 SSH 肯定连不上。
排查方式:登录云控制台的 Web Console(这个不走 SSH),执行:
systemctl status sshd
如果看到 “inactive” 或 “failed”,说明服务没启动。执行:
sudo systemctl restart sshd
把 SSH 服务重启一下。如果负载过高导致的问题,需要先处理高负载的原因(可能是被攻击、跑满 CPU/内存的进程等)。
原因八:本地 SSH 客户端配置问题
排除了以上所有服务器端原因之后,问题可能出在本地。
一个常见问题:~/.ssh/known_hosts 文件里记录了旧的服务器指纹,服务器重装系统后指纹变了,SSH 客户端会拒绝连接并报错 “WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED”。解决方法:
ssh-keygen -R 服务器IP
删除旧的记录后再连,会让你重新确认新指纹。
另一个问题:连接超时设置太短。编辑 ~/.ssh/config,增加超时时间:
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
ConnectTimeout 30
排查顺序总结
遇到 SSH 连不上,按这个顺序查:
第一步:ping 服务器 IP,看网络通不通。不通——服务器可能宕机了,联系服务商。不通但能 ping 其他网站——可能是服务器被 DDoS 封了。
第二步:换网络。用手机 4G 热点试试。能连了——说明本地网络(公司网/校园网)封了 22 端口。
第三步:ping 通但 telnet 22 端口不通——防火墙或安全组拦了。登录云控制台 Web Console 排查。
第四步:逐项检查以上八个原因,按顺序排查:密码/账号 → 端口 → 密钥 → 防火墙 → 安全组 → IP 被封 → 服务状态 → 客户端配置。
常用命令速查:
ping 服务器IP
telnet 服务器IP 22
ssh -v 用户名@服务器IP -p 端口
ssh-keygen -R 服务器IP
sudo systemctl status sshd
sudo ufw status
下一步
如果按以上顺序排查完还是连不上,大概率是服务器本身的问题(系统崩溃、磁盘满了、被人入侵了),建议直接通过云控制台的 VNC/Web Console 登录服务器,从服务器内部排查。萤光云平台提供 7×24 小时的控制台访问,遇到 SSH 连不上的紧急情况,可以先通过控制台登录排查,平台也有专门的技术文档覆盖常见的连接问题。新用户建议先在平台提供的体验机里熟悉一下基本操作。














