香港CN2 VPS突然连不上了,SSH客户端转半天圈最后弹出一个“Connection timed out”或者“Connection refused”。这个时候人容易慌——服务器是不是挂了?是不是被攻击了?数据还在不在?先稳住。SSH连不上这件事,九成以上的情况不是服务器本身出了大问题,而是某一层“关卡”把连接拦住了。从你的电脑到服务器之间,至少有四道关卡:本地网络、公网路由、云平台安全组、服务器内部防火墙。按顺序逐层排查,比一上来就重装系统或者找客服要高效得多。
第一层:确认服务器是否活着?
在排查任何配置问题之前,先确认最基本的——服务器本身有没有在运行。
看VPS服务商的控制台。登录云平台,查看实例状态。如果显示“运行中”,说明宿主机层面没问题。如果显示“已停止”或“异常”,先通过控制台重启实例。
用ping测试连通性:
ping 你的VPS_IP
如果ping通,说明网络层至少能到达服务器,问题大概率在端口或防火墙层面。如果ping不通,有两种可能:服务器宕机了,或者ICMP被服务器防火墙拦截了。
香港CN2 VPS特别要注意一点:很多商家默认开启了ICMP限速或禁用ping。所以ping不通不代表服务器一定有问题。更准确的判断方法是telnet测试端口:
telnet 你的VPS_IP 22
如果22端口能连上,说明服务器活着,只是ICMP被禁了。如果端口也连不上,继续往下查。
另一个判断方法是用VNC控制台。几乎所有VPS商家都提供VNC或Web控制台登录功能,绕过SSH直接连到服务器的“屏幕”。如果VNC能进系统,说明服务器本身没问题,问题出在网络或SSH配置上。
第二层:检查云平台安全组
如果确认服务器在运行,但SSH端口连不上,第二层要查的就是云平台的安全组。
安全组是云服务商在虚拟化层面设置的防火墙,优先级高于服务器内部的防火墙。很多人改了半天服务器里的iptables或ufw,结果发现是云控制台的安全组压根没放行22端口。
排查方法:登录VPS服务商的控制台,找到实例关联的安全组,查看入方向规则。确认有没有一条规则允许你的IP访问22端口(或者你自定义的SSH端口)。
常见的安全组配置错误:
1. 规则没生效:添加了规则但忘记保存,或者规则配置了但没关联到实例。
2. 源IP限制过严:安全组规则里的源地址填了某个特定的IP段,但你的公网IP变了。家用宽带的公网IP通常是动态的,今天能用不代表明天还能用。如果是这种情况,临时把源地址改成0.0.0.0/0测试一下,确认能连上后再收窄。
3. 端口填错:如果你改过SSH端口(比如改成了58222),安全组里放行的还是22端口,那自然连不上。
一个容易被忽略的细节:部分云平台的安全组规则有优先级概念。如果有一条“拒绝所有”的规则排在前面,后面放行22端口的规则就不生效了。检查规则列表的顺序,确保放行规则在拒绝规则之前。
第三层:检查服务器内部防火墙
安全组确认放行了22端口,但SSH还是连不上,接下来查服务器内部的防火墙。
Ubuntu/Debian系统:
sudo ufw status
如果显示Status: active,查看规则列表里有没有放行22端口。如果没有:
sudo ufw allow 22/tcp
如果你改过SSH端口,把22换成实际端口。
CentOS/Rocky系统:
sudo firewall-cmd --list-all
查看ports字段里有没有22端口。如果没有:
sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --reload
一个特别容易踩的坑:有人开了防火墙,但没有提前放行SSH端口,结果把自己锁在门外了。如果你还能通过VNC登录服务器,用上面的命令补救。如果VNC也进不去,只能通过云平台的控制台重置防火墙规则,或者进入救援模式。
iptables直接配置的情况:
sudo iptables -L -n
如果看到一条DROP或REJECT规则拦住了22端口,需要添加放行规则:
sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT
第四层:检查SSH服务本身
安全组和防火墙都放行了,但SSH还是连不上,问题可能出在SSH服务本身。
如果还能通过VNC登录服务器,检查SSH服务状态:
systemctl status sshd
如果显示inactive或failed,启动它:
systemctl start sshd
systemctl enable sshd
检查SSH监听的端口:
ss -tlnp | grep sshd
输出会显示SSH实际监听的端口。如果显示的是0.0.0.0:22,说明监听正常。如果显示的是127.0.0.1:22,说明SSH只监听本地回环地址,外部连接会被拒绝。这种情况需要修改/etc/ssh/sshd_config里的ListenAddress配置。
检查SSH配置文件是否有语法错误:
sshd -t
如果有报错,根据提示修改/etc/ssh/sshd_config。
检查是否改了默认端口:
grep "^Port" /etc/ssh/sshd_config
如果输出的是Port 58222而不是默认的22,那连接的时候需要指定端口:
ssh -p 58222 root@你的VPS_IP
检查是否禁用了root登录或密码登录:
grep -E "PermitRootLogin|PasswordAuthentication" /etc/ssh/sshd_config
如果PermitRootLogin是no,root用户无法SSH登录,需要用普通用户登录后再su或sudo。
如果PasswordAuthentication是no,密码登录被禁用,只能用密钥登录。如果你没有配置密钥,就会被拒之门外。这种情况需要通过VNC登录服务器,把配置改回yes,重启SSH服务。
第五层:检查本地网络和客户端问题
服务器端全部排查完了,还是连不上,问题可能在你这边。
1. 本地防火墙或杀毒软件拦截:Windows Defender、360、火绒等可能拦截了SSH客户端的出站连接。临时关闭防火墙测试一下。
2. 本地网络限制:公司网络或学校网络可能封了22端口。用手机4G/5G开热点测试一下,如果热点能连上,说明是本地网络的问题。
3. SSH客户端配置问题:如果你用的是~/.ssh/config文件,检查里面有没有针对这个IP的错误配置。临时用命令行直接连接测试:
ssh -v root@你的VPS_IP
-v参数会输出详细的调试信息,能看到连接卡在哪一步。如果卡在Connecting to ...,是网络层问题;如果卡在SSH2_MSG_KEXINIT,可能是MTU或加密算法协商问题。
4. 换个客户端测试:Windows自带的OpenSSH、PuTTY、Xshell、Termius都试一遍。如果某个客户端能连而其他的不行,问题出在客户端配置上。
一个完整的排查流程
把上面的步骤串起来,形成可执行的流程:
第1步:ping测试。ping通说明网络可达,ping不通先看VNC能不能进系统。
第2步:telnet测试端口。telnet IP 22,如果端口不通,进入第3步。
第3步:查云平台安全组。确认入方向规则放行了SSH端口,源IP没有限制过严。
第4步:通过VNC登录服务器,查内部防火墙(ufw/firewalld/iptables),确认SSH端口放行。
第5步:查SSH服务状态。systemctl status sshd,确认服务在运行、监听地址正确、配置文件没有语法错误。
第6步:检查是否改了端口或禁用了密码登录。确认连接时用的端口和认证方式正确。
第7步:本地网络排查。换热点测试、换客户端测试、用ssh -v看详细日志。
香港CN2 VPS大部分SSH连不上的问题,在前三步就能定位。真正需要重装系统的情况非常少——大多数时候只是某一层的规则挡住了连接,把规则改对,问题就解决了。
相关内容
