修改 SSH 端口后防火墙导致无法连接怎么排查

文章导读
修改 SSH 端口后连不上,绝大多数情况不是服务挂了,而是流量在半路被拦下了。最优先要查的是云平台控制台的安全组规则,其次才是系统内部的防火墙配置。
📋 目录
  1. 操作前重要警告
  2. 第一步:修改 SSH 配置文件
  3. 第二步:检查服务监听状态
  4. 第三步:放行系统防火墙
  5. 第四步:同步云平台安全组
  6. 怎么验证是否生效
  7. 常见坑与紧急恢复
A A

修改 SSH 端口后连不上,绝大多数情况不是服务挂了,而是流量在半路被拦下了。最优先要查的是云平台控制台的安全组规则,其次才是系统内部的防火墙配置。

先说结论:修改端口后无法连接,通常是因为云平台安全组未同步放行新端口,或系统防火墙未更新规则。

  • 先确认:sshd 服务是否监听新端口且绑定 0.0.0.0
  • 先处理:同时在系统防火墙和云控制台安全组放行新端口
  • 再验证:使用 telnet 或 nc 测试 TCP 连通性

操作前重要警告

在修改配置前,务必确认拥有云服务器的 VNC 或远程控制台权限。一旦防火墙或 SSH 配置错误导致无法远程连接,控制台是唯一的恢复途径。建议先放行新端口,验证成功后再关闭 22 端口。

第一步:修改 SSH 配置文件

使用 root 权限编辑配置文件。以下以 CentOS/Ubuntu 通用路径为例:

修改 SSH 端口后防火墙导致无法连接怎么排查
sudo vim /etc/ssh/sshd_config

找到 #Port 22 行,取消注释并修改为新端口(例如 2222):

Port 2222

保存退出后,重启 SSH 服务使配置生效:

sudo systemctl restart sshd

第二步:检查服务监听状态

确认 sshd 已正常运行并监听新端口。执行以下命令:

sudo systemctl status sshd
sudo ss -tlnp | grep :2222

确认输出包含 0.0.0.0:2222[::]:2222。如果显示 127.0.0.1:2222,说明只允许本地连接,需检查配置中的 ListenAddress 设置。

修改 SSH 端口后防火墙导致无法连接怎么排查

第三步:放行系统防火墙

根据系统类型执行相应命令,注意需要 root 权限:

CentOS/RHEL (firewalld):

sudo firewall-cmd `--add-port`=2222/tcp `--permanent`
sudo firewall-cmd `--reload`

Ubuntu/Debian (ufw):

修改 SSH 端口后防火墙导致无法连接怎么排查
sudo ufw allow 2222/tcp

第四步:同步云平台安全组

登录云服务商控制台,找到实例关联的安全组,在“入方向”规则中添加新端口的 TCP 规则。注意端口范围需精确填写(如 2222/2222),授权对象通常填 0.0.0.0/0 或你的本地 IP。

怎么验证是否生效

在本地客户端使用以下命令测试 TCP 连通性:

telnet 服务器 IP 2222
# 或
nc -zv 服务器 IP 2222

如果能建立连接(显示 Connected 或 succeeded),说明网络链路已通。此时若 SSH 仍失败,需排查密钥或认证配置。若连接被拒绝或超时,则继续检查上述防火墙和安全组设置。

常见坑与紧急恢复

  • 安全组规则未启用:检查是否配错了网络类型(如配到了内网安全组)。
  • 服务未重启:修改配置后必须重启 sshd 服务,仅 reload 可能不生效。
  • SELinux 拦截:若开启 SELinux,非标端口可能被拦截。正式环境建议使用 semanage port -a -t ssh_port_t -p tcp 2222 添加策略。临时测试可执行 setenforce 0测试后务必执行 setenforce 1 恢复
  • 锁死风险:修改端口时直接关闭了 22 端口,一旦新端口配置失误将无法远程登录。建议保留 22 端口直至新端口验证成功。
  • 紧急恢复:若无法连接,通过云控制台 VNC 登录,还原 /etc/ssh/sshd_config 中的端口为 22,重启服务,并检查防火墙规则。