最近在倒腾服务器的时候,遇到一个很搞心态的事情:辛辛苦苦配好的环境,突然有一天 SSH 连不上了。查了一圈才发现,好家伙,唯独默认的 22 端口被“掐”断了,其他服务都好端端的。

这种情况其实并不少见,特别是一些走特定线路(比如某些香港路线)的 VPS,上游为了防止被恶意扫描或滥用,直接在防火墙层面就把 22 端口给禁了。这时候别急着给服务商发工单骂街,咱们先自己动手,用几种技术手段绕过去。

🔍 为什么是 22 端口?

SSH 协议默认使用 22 端口进行远程登录。正因为它是默认端口,全世界的网络扫描器、僵尸网络每隔几分钟就会对着全网 IP 的 22 端口撞库尝试暴力破解。很多运营商为了避免不必要的麻烦和 DDoS 风险,就直接把这个端口封锁了。这就像大家都知道你家前门是 22,坏人只敲前门,你把前门砌上,换个暗道入口,家里反而清净了。

💡 解决方案一:修改 SSH 默认端口(最推荐)

这是最简单粗暴也最有效的方法。把 22 改成一个没人猜得到的高位端口,既能绕过封锁,又能减少 90% 以上的恶意扫描日志。

SSH配置文件修改示例,展示了如何添加新的Port行

图示:修改 sshd_config 文件以更改 SSH 端口

操作步骤如下:

  1. 登录服务器:既然 22 连不上,如果你还没修改过,可能需要通过服务商提供的“网页版 VNC”或者控制台紧急 Console 登录进去。

  2. 修改配置文件: 打开 SSH 配置文件:

    vim /etc/ssh/sshd_config
    

    找到 #Port 22 这一行。去掉前面的 # 号,然后在下面新加一行,写上你想用的端口号(建议选择 10000-65535 之间的数字,比如 22222):

    Port 22
    Port 22222
    

    注意:建议先保留 22,同时添加新端口,测试成功后再删掉 22,防止配置错误导致自己也登不上。

SSH密钥登录原理示意图

图示:SSH 密钥登录工作原理

  1. 重启 SSH 服务

CentOS 系: bash systemctl restart sshd Ubuntu/Debian 系: bash systemctl restart ssh

  1. 放行防火墙: 如果服务器开了防火墙(如 iptables, ufw, firewalld),记得把新端口放行。 firewalld 举例:

    firewall-cmd --zone=public --add-port=22222/tcp --permanent
    firewall-cmd --reload
    

    ufw 举例:

    ufw allow 22222/tcp
    
  2. 测试连接: 退出当前连接,在本地终端尝试连接新端口:

    ssh root@your_ip -p 22222
    

    如果能连上,恭喜你,封锁已绕过!此时再把配置文件里的 Port 22 删掉,重启服务即可。

🔐 解决方案二:使用 SSH 密钥登录并禁用密码

改端口虽然能避开简单的封锁,但为了绝对安全,建议结合密钥登录使用。密钥登录几乎无法被暴力破解,而且有些特殊环境下,仅仅禁用“密码认证”就能满足某些合规性要求从而解封。

操作步骤:

  1. 本地生成密钥对(如果已经有了可以跳过):

    ssh-keygen -t rsa -b 4096 -C "[email protected]"
    

    一路回车,会在 ~/.ssh/ 目录下生成 id_rsa(私钥)和 id_rsa.pub(公钥)。

  2. 上传公钥到服务器: 你可以用 ssh-copy-id(前提是还能密码登录):

    ssh-copy-id -p 22222 root@your_ip
    

    或者手动把 id_rsa.pub 的内容粘贴到服务器的 ~/.ssh/authorized_keys 文件里。

  3. 修改服务端配置: 编辑 /etc/ssh/sshd_config

    PubkeyAuthentication yes
    PasswordAuthentication no  # 关键:禁用密码登录
    
  4. 重启服务并测试

🚀 解决方案三:终极手段——使用反向隧道或 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
    

遇到端口封锁不用慌,大多数情况下这都是常规操作。换个端口,顺便加强一下安全策略,服务器反而会运行得更稳。

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭