必须同时修改配置、防火墙和selinux三处,缺一不可;先在sshd_config中保留port 22并新增port 2222,再用firewall-cmd放行新端口、semanage授权selinux,最后重启sshd并验证监听与连接成功后才注释22端口。

能改,但必须同时改配置、防火墙、SELinux 三处,缺一不可;否则新端口监听了也连不上。
修改 /etc/ssh/sshd_config 中的 Port 配置
直接编辑配置文件,不要只改一行 —— 建议先保留原端口再加新端口,避免改错后失联:
- 用
sudo vi /etc/ssh/sshd_config打开文件 - 找到
#Port 22这行,去掉#,保持Port 22 - 在下方新增一行,比如
Port 2222(选 1024–65535 之间,避开常用服务端口如 80、443、3306) - 保存退出,此时 SSH 会同时监听 22 和 2222
注意:Port 指令可多次出现,每行一个端口;不写 Port 则默认只用 22。别删旧端口,等验证成功后再注释掉。
让 firewalld 放行新端口
CentOS 7 默认用 firewalld,不是 iptables;只开 iptables 规则没用:
- 执行
sudo firewall-cmd --zone=public --add-port=2222/tcp --permanent - 再执行
sudo firewall-cmd --reload - 验证是否生效:
sudo firewall-cmd --zone=public --query-port=2222/tcp,返回yes才算成功
如果返回 no,说明没加成功或没 reload;检查拼写、空格、协议类型(必须是 tcp)。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
SELinux 不放行,新端口照样被拦
SELinux 默认只认 ssh_port_t 类型的 22 端口;新加的端口要手动授权:
- 先确认是否启用 SELinux:
sestatus,输出enabled就需要这步 - 安装工具(若未装):
sudo yum install policycoreutils-python - 查当前允许的 SSH 端口:
semanage port -l | grep ssh - 添加新端口:
semanage port -a -t ssh_port_t -p tcp 2222 - 再查一遍确认:
semanage port -l | grep ssh应该显示ssh_port_t tcp 2222,22
如果报错 ValueError: Port tcp/2222 already defined,说明已存在,不用重复加;如果提示命令未找到,就是没装 policycoreutils-python。
重启并验证,别跳过测试环节
改完三处才真正算准备就绪:
- 重启服务:
sudo systemctl restart sshd - 检查监听状态:
sudo ss -tlnp | grep :2222,能看到sshd进程才说明监听成功 - 另开一个终端,用新端口连接:
ssh -p 2222 user@your-server-ip - 连通后,再回原终端注释掉
Port 22行,重启sshd,彻底停用 22 端口
最常踩的坑是:改了配置但忘了 SELinux 或 firewalld,结果 ss 显示监听了,ssh -p 却 timeout;或者 reload firewalld 失败却没检查返回值,以为开了实际没开。










