SSH 连不上服务器?从报错信息一层层定位

举报
yd_228326260 发表于 2026/11/10 06:32:57 2026/11/10
【摘要】 SSH 连不上服务器?从报错信息一层层定位SSH 连不上时,报错本身就是最好的线索:Connection timed out、Connection refused、Permission denied (publickey),每一种指向的环节都不一样。不要一上来就重启服务器或重装系统,先把报错对上号,再按从外到内的顺序查。 一、先看报错,定方向Connection timed out(超时)...

SSH 连不上服务器?从报错信息一层层定位

SSH 连不上时,报错本身就是最好的线索:Connection timed out、Connection refused、Permission denied (publickey),每一种指向的环节都不一样。不要一上来就重启服务器或重装系统,先把报错对上号,再按从外到内的顺序查。

一、先看报错,定方向

  • Connection timed out(超时):包根本没到服务器,或回包被挡住了。重点查网络通路:安全组、EIP、本机防火墙。
  • Connection refused(拒绝连接):包到了服务器,但 22 端口没人在监听。重点查 sshd 服务本身。
  • Permission denied (publickey / password):网络和服务都通了,卡在身份验证上。重点查密钥、权限、账号状态。
  • Host key verification failed:服务器指纹变了(重装、换 IP 复用),本地 known_hosts 里还是旧指纹。确认服务器确实是你自己的之后再更新指纹,不要盲目跳过校验。

先把完整报错记下来,带上 -v 再跑一次,信息会多很多:

ssh -v -i ~/.ssh/id_ed25519 root@<弹性公网IP>

二、超时:先确认网络通路

超时是最容易误判的一类,因为它和“安全组放行了还是不通”是同一条链路:

ping <弹性公网IP>              # 只验证 IP 可达,不代表端口通
telnet <弹性公网IP> 22         # 或 nc -vz <弹性公网IP> 22
  • ping 不通、端口也不通:先查实例有没有绑定弹性公网 IP,访问地址是不是内网 IP 或已释放的旧地址。
  • ping 通、22 端口不通:逐项核对安全组入方向规则(TCP 22、来源、优先级、绑对实例网卡没有),再查本机 firewalld / iptables / ufw 有没有放行 22。
  • 换个网络再试一次:如果公司或校园网封了出方向 22,换手机热点常能立刻区分是服务器问题还是本地网络问题。

三、拒绝连接:查 sshd 是不是真的在跑

包到了、端口没人接,通常是 sshd 没启动、监听地址不对、或端口被改了:

systemctl status sshd --no-pager
ss -tlnp | grep ':22'
cat /etc/ssh/sshd_config | grep -E '^(Port|ListenAddress|PermitRootLogin|PasswordAuthentication|PubkeyAuthentication)'
  • sshd 没跑:systemctl start sshd 后再看日志里为什么挂掉,journalctl -u sshd --since "30 minutes ago" --no-pager。
  • sshd 在跑但监听的不是 22:看 Port 是不是被改成了别的端口,连接时就要加 -p <端口>。
  • 刚改过配置没生效:改完 sshd_config 要 systemctl reload sshd,只保存文件是不生效的。

四、验证失败:密钥、权限、账号三件套

网络通、服务在,却被 Permission denied 挡住,九成是下面三处之一:

  1. 密钥对不上:本地 -i 指定的私钥是不是和服务器上 ~/.ssh/authorized_keys 里那把公钥配对。换一台机器、换一个密钥文件都会对不上。
  2. 权限太松:SSH 对权限很敏感,太松会被直接拒绝:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519
  1. 账号被锁或禁了密码登录:PasswordAuthentication no 时密码再对也登不上去;root 被 PermitRootLogin prohibit-password 限制时,只能用密钥。确认用的是允许的登录方式和账号。

排查时用 -v 看最后卡在哪一步:Offering public key 之后被拒,是密钥问题;根本没走到这一步,是前面的网络或服务问题。

五、指纹变化:先确认,再更新

重装系统、实例重建后,服务器指纹会变,客户端会直接拒绝连接并提示中间人风险:

ssh-keygen -R <弹性公网IP>

先通过控制台、VNC 或可信渠道确认这台服务器确实是你重建的那台,再执行上面这条清掉旧指纹重新连接。不要在没确认的情况下用 StrictHostKeyChecking=no 绕过去,那是把校验整个关掉。

六、排查清单(收藏版)

  1. 报错是哪一种:超时、拒绝、验证失败、指纹变化?
  2. ssh -v:卡在哪一步?
  3. 超时:EIP、安全组入方向 22、本机防火墙、换网络复测。
  4. 拒绝:sshd 在跑吗?监听端口是多少?改配置后 reload 了吗?
  5. 验证失败:密钥配对吗?~/.ssh 700、authorized_keys 600 吗?账号允许这种登录方式吗?
  6. 指纹变化:确认是自己的服务器后,再 ssh-keygen -R 更新。

按报错分流、一步验证一个结论,大多数 SSH 连不上都能在半小时内定位到具体一层,而不是把所有配置都改一遍再碰运气。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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