SSH 22端口连不上?别慌,教你几招快速绕过封锁
最近在倒腾服务器的时候,遇到一个很搞心态的事情:辛辛苦苦配好的环境,突然有一天 SSH 连不上了。查了一圈才发现,好家伙,唯独默认的 22 端口被“掐”断了,其他服务都好端端的。
这种情况其实并不少见,特别是一些走特定线路(比如某些香港路线)的 VPS,上游为了防止被恶意扫描或滥用,直接在防火墙层面就把 22 端口给禁了。这时候别急着给服务商发工单骂街,咱们先自己动手,用几种技术手段绕过去。
🔍 为什么是 22 端口?
SSH 协议默认使用 22 端口进行远程登录。正因为它是默认端口,全世界的网络扫描器、僵尸网络每隔几分钟就会对着全网 IP 的 22 端口撞库尝试暴力破解。很多运营商为了避免不必要的麻烦和 DDoS 风险,就直接把这个端口封锁了。这就像大家都知道你家前门是 22,坏人只敲前门,你把前门砌上,换个暗道入口,家里反而清净了。
💡 解决方案一:修改 SSH 默认端口(最推荐)
这是最简单粗暴也最有效的方法。把 22 改成一个没人猜得到的高位端口,既能绕过封锁,又能减少 90% 以上的恶意扫描日志。
图示:修改 sshd_config 文件以更改 SSH 端口
操作步骤如下:
-
登录服务器:既然 22 连不上,如果你还没修改过,可能需要通过服务商提供的“网页版 VNC”或者控制台紧急 Console 登录进去。
-
修改配置文件: 打开 SSH 配置文件:
vim /etc/ssh/sshd_config找到
#Port 22这一行。去掉前面的#号,然后在下面新加一行,写上你想用的端口号(建议选择 10000-65535 之间的数字,比如22222):Port 22 Port 22222注意:建议先保留 22,同时添加新端口,测试成功后再删掉 22,防止配置错误导致自己也登不上。
图示:SSH 密钥登录工作原理
- 重启 SSH 服务:
CentOS 系:
bash systemctl restart sshd
Ubuntu/Debian 系:
bash systemctl restart ssh
-
放行防火墙: 如果服务器开了防火墙(如 iptables, ufw, firewalld),记得把新端口放行。 firewalld 举例:
firewall-cmd --zone=public --add-port=22222/tcp --permanent firewall-cmd --reloadufw 举例:
ufw allow 22222/tcp -
测试连接: 退出当前连接,在本地终端尝试连接新端口:
ssh root@your_ip -p 22222如果能连上,恭喜你,封锁已绕过!此时再把配置文件里的
Port 22删掉,重启服务即可。
🔐 解决方案二:使用 SSH 密钥登录并禁用密码
改端口虽然能避开简单的封锁,但为了绝对安全,建议结合密钥登录使用。密钥登录几乎无法被暴力破解,而且有些特殊环境下,仅仅禁用“密码认证”就能满足某些合规性要求从而解封。
操作步骤:
-
本地生成密钥对(如果已经有了可以跳过):
ssh-keygen -t rsa -b 4096 -C "[email protected]"一路回车,会在
~/.ssh/目录下生成id_rsa(私钥)和id_rsa.pub(公钥)。 -
上传公钥到服务器: 你可以用
ssh-copy-id(前提是还能密码登录):ssh-copy-id -p 22222 root@your_ip或者手动把
id_rsa.pub的内容粘贴到服务器的~/.ssh/authorized_keys文件里。 -
修改服务端配置: 编辑
/etc/ssh/sshd_config:PubkeyAuthentication yes PasswordAuthentication no # 关键:禁用密码登录 -
重启服务并测试。
🚀 解决方案三:终极手段——使用反向隧道或 WebSocket
如果你的网络环境极其恶劣,不仅封锁了 22,还封锁了所有非常规端口,甚至对 SSH 流量特征进行深度包检测(DPI),那你可能需要稍微高级一点的玩法。
- 使用 FRP 反向代理:如果你有一台国内或其他网络正常的 VPS 作为跳板机,可以在被封机器上装 FRP 客户端,连接到你的跳板机,把跳板机的某个端口流量转发过来。
- WebSocket 隧道:利用类似 gost 这类工具,把 SSH 流量伪装成 HTTPS WebSocket 流量。这在很多只封锁 SSH 协议但不封锁 Web 流量的环境里简直是神器。
⚠️ 避坑指南
- 先留后路:修改端口前,务必先开启新端口并测试成功,再关闭旧端口。千万不要直接把 22 改成别的然后重启,一旦报错,你就只能去服务商控制台哭诉了。
- SELinux 还会捣乱:如果你用的是 CentOS 系统,改了端口还是连不上,可能是 SELinux 在作祟。记得执行:
semanage port -a -t ssh_port_t -p tcp 22222
遇到端口封锁不用慌,大多数情况下这都是常规操作。换个端口,顺便加强一下安全策略,服务器反而会运行得更稳。

评论已关闭