必须先添加新端口并验证连通后再禁用22端口:编辑sshd_config追加port 4211(保留port 22),放行firewalld规则并重载,用semanage为selinux授权新端口,重启sshd后测试ssh -p 4211连通性,确认无误再注释port 22并重启。

sshd 默认监听 22 端口,直接改完就关掉 22 很容易把自己锁在外面。必须先加新端口、验证通了,再删旧端口。
修改 /etc/ssh/sshd_config 添加新端口
别急着注释或删掉 Port 22,先追加一行新端口(比如 4211):
Port 22 Port 4211
保存后不用重启,只是让 sshd 启动时多监听一个地址。这一步出错最常见的是:忘记取消 #Port 22 的注释,或者写错格式(比如写成 Port=4211 或漏空格)。
-
Port后面必须跟一个空格,再跟数字 - 端口号建议选
10000–65535范围,避开常用服务(如80、443、3306) - 不要用
0–1023的特权端口,除非你明确以 root 运行且已处理权限问题
firewalld 必须放行新端口
CentOS 7 默认用 firewalld,不是 iptables。执行这两条命令:
firewall-cmd --permanent --add-port=4211/tcp firewall-cmd --reload
如果提示 FirewallD is not running,先运行 systemctl start firewalld。别用 iptables 规则混着配,firewalld 和 iptables 冲突会导致端口看似开了实则不通。
- 验证是否生效:
firewall-cmd --list-ports应该输出含4211/tcp -
--permanent缺不得,否则重启后规则丢失 - 别只跑
--add-port不--reload,规则不会自动生效
SELinux 阻止新端口?用 semanage 加白名单
SELinux 默认只认 22 是 SSH 端口。不加白名单,sshd 即使启动了也 bind 不上新端口,日志里会报 bind: Permission denied。
先装工具(若提示 semanage: command not found):
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
yum install -y policycoreutils-python
再加端口:
semanage port -a -t ssh_port_t -p tcp 4211
验证是否成功:
semanage port -l | grep ssh
输出里应有 ssh_port_t tcp 4211, 22。如果失败,semanage 命令语法错、端口已被占用、或 SELinux 处于 disabled 状态都会导致无效。
重启 sshd 并验证连接,再删 Port 22
执行 systemctl restart sshd,然后立刻用新端口测试:
ssh -p 4211 user@your-server-ip
连得上,说明配置生效;连不上,先看 journalctl -u sshd -n 50 里有没有 bind 错误、拒绝连接等关键线索。
- 确认新端口监听:
ss -tnlp | grep :4211或netstat -tlnp | grep :4211 - 确保测试连接时没用错 IP、用户、密钥权限(
~/.ssh权限太宽也会拒连) - 只有新端口稳定可用后,才回到
/etc/ssh/sshd_config注释掉Port 22,再systemctl restart sshd
最后删 22 这步最容易被跳过——很多人改完以为万事大吉,结果下次连不上才发现旧端口还开着,反而暴露了双入口。










