centos 7修改ssh端口必须同步配置firewalld永久规则和selinux端口策略,缺一不可;先保留port 22兜底,新增port 22222并验证双端口监听、firewalld放行及semanage注册成功后,再注释port 22并重启sshd。

改 SSH 端口不是“改完配置重启就完事”,CentOS 7 上必须同步处理 firewalld 和 SELinux,漏掉任一环节都会导致新端口连不上——这是绝大多数人卡住的地方。
修改 /etc/ssh/sshd_config 时保留 22 端口做兜底
别一上来就注释或删掉 Port 22。先在配置文件里追加新端口(比如 Port 22222),保持两行共存:
Port 22 Port 22222
这样即使新端口因防火墙或 SELinux 没配好而失败,你还能用原端口登录补救。保存后执行 systemctl restart sshd,再用 ss -tnl | grep ':22\|:22222' 确认两个端口都在 LISTEN 状态。
firewalld 必须用 --permanent 添加端口并重载
firewall-cmd --add-port=22222/tcp 这种临时命令重启 firewalld 就失效。必须带 --permanent 参数:
firewall-cmd --zone=public --add-port=22222/tcp --permanentfirewall-cmd --reload- 验证:运行
firewall-cmd --list-ports,确保输出含22222/tcp
如果用的是 iptables(非默认),则需手动插入规则并 service iptables save;但 CentOS 7 默认是 firewalld,别混用。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
SELinux 不放行新端口,sshd 根本不会绑定
哪怕配置和防火墙都对了,sestatus 是 enforcing 状态时,sshd 会拒绝监听非白名单端口。必须用 semanage 注册:
- 先装工具:
yum install policycoreutils-python - 查当前允许的 SSH 端口:
semanage port -l | grep ssh_port_t - 添加新端口:
semanage port -a -t ssh_port_t -p tcp 22222 - 再查一遍确认已生效,输出里应含
22222
如果跳过这步,journalctl -u sshd 会看到类似 error: bind: Permission denied 的报错,但日志不提示 SELinux,容易误判。
验证成功后再禁用 22 端口
用新端口连一次成功(比如 ssh -p 22222 user@host),再回服务器编辑 /etc/ssh/sshd_config,把 Port 22 行注释掉(加 #),再 systemctl restart sshd。切忌提前关 22 端口——远程操作时一旦断连,没物理控制台就只能重装系统。
真正容易被忽略的点是:SELinux 端口注册和 firewalld 永久规则这两步,缺一不可;且必须在新端口连通验证之后,才动 22 端口。










