LHIDC

Linux 服务器 SSH 连接不上怎么办?按报错类型排查更快

Linux 服务器 SSH 连接不上时,先按报错把问题分流,再分别检查网络、端口、服务、认证和安全策略。本文给出一套从客户端到服务器侧的完整排查路径。

Linux 服务器 SSH 连接不上,不能只用“连不上”三个字来处理。真正有效的排查方式,是先看客户端返回的具体报错,再决定下一步检查网络、端口、服务还是认证。否则很容易把密码问题当成网络故障,或者把安全组问题误判成系统宕机。

先把故障分成四类

用户看到的情况说明连接到了哪一步主要排查方向
`Connection timed out`请求没有得到端口响应IP、线路、安全组、防火墙、端口放行
`Connection refused`目标端口明确拒绝连接SSH 服务、监听端口、端口是否改过
`Permission denied`SSH 服务已响应,认证失败用户名、密码、密钥、登录策略
登录很慢或卡在认证前能连接但握手慢DNS 反查、服务器负载、网络丢包

这个表的价值在于避免一开始就乱改系统配置。比如 `Permission denied` 已经说明端口可达,继续排查安全组意义不大;而 `Connection timed out` 还没有进入认证阶段,反复改密码也解决不了问题。

从客户端确认自己连的是正确目标

先确认 IP、端口和用户名没有写错。默认 SSH 端口是 22,但很多服务器会改成其他端口:

ssh -p 2222 root@服务器IP

如果使用终端工具,也要确认“端口”字段,不是只改会话名称。对于同一台服务器,建议同时记录公网 IP、SSH 端口、系统账号和最近是否改过防火墙。

判断端口是否可达

在本地可以先测端口:

nc -vz 服务器IP 22

如果显示连接成功,说明网络和端口基本可达,接下来重点看账号认证。如果超时,多数是安全组、防火墙、线路或服务未监听。如果立刻拒绝,通常是端口无服务监听。

没有 `nc` 时可以用:

telnet 服务器IP 22

端口测试不是为了“修复”,而是为了判断问题还在网络层,还是已经进入 SSH 服务层。

服务器侧检查 SSH 服务

如果还能通过控制台、VNC 或面板终端进入服务器,先看服务状态:

systemctl status sshd

看到 `active (running)` 表示服务运行中;如果是 `failed` 或 `inactive`,继续看日志:

journalctl -u sshd -n 100 --no-pager

Debian/Ubuntu 部分系统服务名是 `ssh`:

systemctl status ssh

日志中出现配置项错误、主机密钥加载失败、端口绑定失败时,不要反复重启,应先修正配置。

看监听端口和监听地址

ss -lntp | grep ssh

如果输出里有 `0.0.0.0:22` 或 `:::22`,表示外部地址可监听 22 端口。如果只看到 `127.0.0.1:22`,外部用户无法连接。如果实际监听 2222,而用户连接 22,也会失败。

日志应该看哪里

CentOS/RHEL 常见认证日志:

/var/log/secure

Debian/Ubuntu 常见认证日志:

/var/log/auth.log

可以查看最近记录:

tail -n 100 /var/log/secure
tail -n 100 /var/log/auth.log

如果日志里没有任何来自用户源 IP 的记录,说明请求可能还没到 SSH 服务;如果有失败记录,则重点看认证原因。

不要把问题扩大

不要在唯一 SSH 会话里直接重启 SSH 或清空防火墙。不要为了图方便长期开放所有端口。不要把 root 密码、私钥和服务器 IP 发给陌生人排查。

用户可以自行完成报错分流、端口测试、服务状态、监听端口、防火墙和日志检查。如果控制台也无法进入,多个端口都不可达,或怀疑 IP 被封禁、攻击清洗、宿主机异常,就需要服务商协助确认底层网络和实例状态。

上一篇 香港服务器速度到底怎么样?大陆三网、国际线路与延迟表现一次看懂 下一篇 SSH 登录提示 `Permission denied`,密码和密钥应该怎么检查

LHIDC 产品中心

继续查看可购买的海外服务器产品

文章用于辅助选型,最终价格、库存与配置请以产品详情页和下单页面展示为准。

查看产品 查看方案