不能直接注释port 22,因ssh支持多端口监听,保留port 22作为备用逃生通道可防新端口因防火墙、selinux或安全组配置失败导致彻底失联;必须先双端口共存验证成功后再禁用22。

改端口不是改一行 Port 就完事——漏掉防火墙、SELinux 或云安全组任意一环,新端口一定连不上,而且你大概率会被自己锁在外面。
为什么不能直接注释掉 Port 22?
新手最常踩的坑:编辑 /etc/ssh/sshd_config 时删掉或注释掉 Port 22,只留 Port 22022。结果新端口因拼写错误、SELinux 拒绝或安全组没开,导致彻底失联。
- SSH 服务支持多端口监听,
Port 22和Port 22022可以共存,这是你的“逃生通道” - 验证成功前,
Port 22必须保持启用状态 - 重启
sshd后,用新终端测试ssh -p 22022 user@ip,确认能登录、执行命令、不掉线,再考虑禁用 22
semanage port -a 报错 “command not found” 怎么办?
CentOS/RHEL 系统默认不预装 SELinux 管理工具,semanage 缺失会导致 sshd 绑定新端口失败,日志里出现 bind: Permission denied。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 先检查 SELinux 是否启用:
sestatus,输出为enforcing或permissive就必须处理 - 安装依赖:
yum install -y policycoreutils-python-utils(RHEL/CentOS)或apt install -y policycoreutils-python-utils(Debian/Ubuntu) - 添加端口上下文:
semanage port -a -t ssh_port_t -p tcp 22022,注意用-a(add),不是-m(modify) - 验证是否生效:
semanage port -l | grep ssh应该能看到你新加的端口
firewalld 放行了,外网还是连不上?
本地 ssh -p 22022 localhost 能通 ≠ 外网能连。云服务器上,流量在到达系统前就被拦截了。
- firewalld 是系统级防火墙,只管“进到服务器”的包;云平台安全组是网络层防火墙,管“进到云主机”的包
- 必须登录阿里云/腾讯云/华为云控制台 → 找到对应实例 → 进入「安全组」→ 添加入方向规则:
TCP协议 + 端口22022/22022+ 授权对象0.0.0.0/0(或更严格的 IP 段) - 漏掉这步,
telnet your_ip 22022会直接超时,且journalctl -u sshd里完全看不到连接尝试记录
怎么确认新端口真的生效了?
别只靠 ssh 命令连得上就收工。很多问题在并发连接或特定客户端下才暴露。
- 查监听:
ss -tulnp | grep :22022—— 必须看到sshd进程在监听该端口 - 查服务:
systemctl status sshd—— 确保没有failed或degraded状态 - 查 SELinux:
ausearch -m avc -ts recent | grep sshd—— 如果有拒绝日志,说明上下文没配对 - 配置语法检查:
sshd -t(无输出才表示合法),比盲目重启更安全
真正麻烦的从来不是改哪一行配置,而是你永远不知道哪一层策略在拦着你——本地防火墙、云安全组、SELinux 上下文、甚至路由器 NAT 映射,都可能让 Port 22022 成为一堵看不见的墙。










