VPS 无法连接 SSH?3 分钟无损自救排查指南

使用 VPS 最头疼的瞬间,莫过于终端突然弹出 Connection timed out 或者 Connection refused。

很多新手遇到连不上,第一反应就是去后台“一键重装系统”或者给客服提工单。重装意味着所有环境清空,提工单又要等几个小时。

其实大多数 SSH 连接问题都可以按标准流程快速定位并自救恢复。收藏好下面这套速查清单。


第一步:测延迟与端口(区分是网络问题还是机器关机)

先确定是机器死了,还是你和机器之间的路断了。

在本地电脑的终端(Windows 的 CMD / PowerShell,或 Mac/Linux 的终端)执行:

1. Ping 测试(看 IP 连通性)

1
ping 你的VPS_IP
  • 如果全是超时(Request timed out):可能被安全设备拦截,或者商家机房整体宕机。
  • 如果 Ping 正常有延迟:说明底层网络连通,机器大概率活着。

2. Tcping 端口测试(核心排查点)

有时 Ping 能通,但 SSH 端口(默认 22 或自定义端口)被阻断:

1
2
# Windows 可下载 tcping 工具,或用 powershell 测试:
Test-NetConnection -ComputerName 你的VPS_IP -Port 22
  • TcpTestSucceeded : False ➔ 说明端口握手失败(服务没起、防火墙拦截、或端口被封)。
  • TcpTestSucceeded : True ➔ 说明网络完全通畅,大概率是密钥权限、用户名密码错误或 sshd 配置写崩。

第二步:登录商家控制台的 VNC(终极急救通道)

只要端口测不通,立刻打开 VPS 商家后台,找到 “VNC” 或 “Console” 按钮点进去。

VNC 是直接接在虚拟机显卡上的屏幕,相当于你坐在服务器物理机面前,就算外界网络完全断开,VNC 也一定能登进去!

在 VNC 窗口里输入用户名(通常是 root)和密码登录。


第三步:在 VNC 里排查三处核心元凶

登进 VNC 后,依次敲入以下命令:

1. 检查 SSH 服务是不是挂了

1
systemctl status sshd || systemctl status ssh
  • 如果显示 inactive (dead) 或 failed,执行看日志:
    1
    2
    systemctl restart sshd
    journalctl -u sshd -n 20 --no-pager
    如果之前手抖改错了 /etc/ssh/sshd_config,日志里会直接指出哪一行语法错误,修改正确后重启即可。

2. 检查是不是防火墙手贱把自己关外面了

很多人装完 ufw 或 iptables 顺手启用,忘了开放 SSH 端口:

1
2
3
4
5
6
7
8
9
# 临时清空 iptables 规则(快速恢复连接)
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# 如果是 ufw,直接临时禁用
ufw disable

执行完立刻在本地尝试重连,如果能连上,证实就是防火墙配置错误。

3. 检查机器是不是内存爆了(OOM)

执行 dmesg -T | grep -i oom,如果看到 Out of memory: Kill process,说明机器内存被跑满,Linux 内核为保命把 sshd 进程杀掉了。关掉吃内存的罪魁祸首进程即可。


第四步:如果确认是 IP 被阻断怎么救?

如果海外测速工具(如 Ping.pe)显示国外全绿、国内全红,说明该 IP 的端口已无法直连。

无损抢救方案:

  1. 换端口:如果只是 22 端口被盯上,改个高位端口(如 43222)可能瞬间复活。
  2. 利用 IPv6:很多商家的 VPS 自带免费的 IPv6 地址。如果你的本地宽带支持 IPv6,直接用 IPv6 地址连接 SSH,完全不受 IPv4 阻断影响。
  3. 加装 Cloudflare 免费反代穿透:通过 Cloudflare Tunnel 将 SSH 流量穿透出来,无需公网 IP 也能安全直连。

日常建议大家配置好自动化备份,如果遇到救不回来的深层系统损毁,再考虑通过 VPS 纯净一键 DD 重装教程 快速重建干净的系统环境。

本篇专攻「SSH 连不上」这一种故障的急救流程;如果是进程杀不死、IPv6 丢包、端口堆积等更广义的系统问题,参考 Linux网络与VPS日常运维故障全景排查手册。