远程 SSH 连接超时 Connection timed out 排查思路是什么

文章导读
遇到 SSH 连接超时,最优先的动作是确认本地到服务器端口的网络通路是否畅通,这适用于大多数云服务器和本地 Linux 环境。
📋 目录
  1. 分步排查与命令
  2. 服务端状态与防火墙
  3. 日志排查路径
  4. 怎么验证是否生效
  5. 常见坑
A A

遇到 SSH 连接超时,最优先的动作是确认本地到服务器端口的网络通路是否畅通,这适用于大多数云服务器和本地 Linux 环境。

先说结论:Connection timed out 通常意味着网络包没有被目标主机接收或响应,重点检查网络链路和防火墙规则,而不是 SSH 配置本身。

  • 先确认本地网络能否到达服务器 IP
  • 先处理云控制台安全组或本地防火墙拦截
  • 再验证 SSH 服务端口是否监听

分步排查与命令

第一步:检查基础网络
在本地终端执行 ping 命令。如果 ping 不通,先确认服务器是否开机,以及是否有 ICMP 禁用的情况。有些云服务器默认禁 ping,但端口可能开放,所以 ping 不通不代表 SSH 一定不能用,但 ping 通是好消息。

ping -c 4 服务器 IP

第二步:检查端口连通性
使用 nc 或 telnet 测试 22 端口。如果这里超时,说明包到了服务器门口但被挡住了,或者服务器没监听。此时应优先登录云厂商控制台,检查“安全组”或“防火墙”规则,确保入方向 TCP 22 端口对当前本地 IP 开放。

远程 SSH 连接超时 Connection timed out 排查思路是什么
# 推荐 nc,没有则用 telnet
nc -v -z 服务器 IP 22
# 或
telnet 服务器 IP 22

第三步:查看连接详细过程
使用 verbose 模式查看卡在哪个阶段。

ssh -v user@服务器 IP

服务端状态与防火墙

如果能通过 VNC 或控制台登录服务器,执行以下命令确认服务状态:

systemctl status sshd
# 或
systemctl status ssh

确保状态为 active (running)。同时检查监听端口:

远程 SSH 连接超时 Connection timed out 排查思路是什么
ss -tlnp | grep 22

检查内部防火墙(重要)
如果服务正常但外部连不上,检查防火墙是否拦截。切勿直接停止防火墙服务,应添加放行规则:

# CentOS/RHEL (firewalld)
firewall-cmd `--list-all`
firewall-cmd `--permanent` `--add-port`=22/tcp
firewall-cmd `--reload`

# Ubuntu (ufw)
ufw allow 22/tcp

# 通用 iptables 查看
iptables -L -n

日志排查路径

在服务器端查看日志,能看到新的登录尝试记录或拒绝记录。注意不同发行版路径差异:

# CentOS/RHEL
tail -f /var/log/secure

# Ubuntu/Debian
tail -f /var/log/auth.log

怎么验证是否生效

执行 ssh 命令时,不再出现 Connection timed out,而是进入密码输入环节或密钥认证环节。使用 ssh -v 模式时,可以看到 debug 信息停留在 Authenticating 而不是 Connecting 阶段超时。

常见坑

  • 云安全组:很多时候服务器内部配置没问题,是云控制台的安全组没加规则,或者只加了 IPv6 没加 IPv4。
  • Fail2ban 封禁:如果之前多次密码错误,可能被 Fail2ban 临时封禁 IP,表现为突然连不上,需检查服务端封禁列表。
  • 非标准端口:如果修改过 SSH 端口,测试时记得指定 -p 参数,否则默认测的是 22。
  • 本地网络限制:公司内网或校园网可能封锁了外部 SSH 端口,尝试切换手机热点排查。