修改 SSH 默认端口是降低服务器被自动化脚本扫描和暴力破解风险的有效手段,适合所有暴露在公网的 Linux 服务器。操作前必须确保防火墙、云平台安全组和新端口连通性,防止把自己锁在门外。
先说结论:修改端口能过滤大部分自动化扫描,但必须配合防火墙规则、云安全组和新连接测试,严禁直接关闭旧端口。
- 先判断:确认服务器是否暴露公网,检查新端口是否被占用,确认 SSH 服务名称。
- 优先做:在云平台安全组和系统防火墙放行新端口,配置 SSH 监听双端口过渡。
- 再验证:新开终端测试新端口登录成功后,再停用旧端口。
前期检查
1. 确认 SSH 服务名称
不同发行版服务名不同,重启前需确认,避免服务重启失败。
systemctl status ssh*Ubuntu/Debian 通常为 ssh,CentOS/RHEL 通常为 sshd。2. 检查端口占用
选择一个 1024–65535 范围内的非特权端口,先确认未被其他服务使用。
sudo ss -tuln | grep ':2222'若无输出说明端口空闲,若有输出需更换端口。分步处理
第一步:修改 SSH 配置
编辑/etc/ssh/sshd_config 文件,建议先保留原 22 端口,新增一行自定义端口,形成双端口监听,以防配置错误导致失联。
sudo nano /etc/ssh/sshd_config找到 Port 配置,修改或添加:Port 22
Port 2222保存退出后,不要立即关闭旧端口。第二步:云平台安全组放行(关键)
仅改系统配置不够,云服务器(如阿里云、腾讯云、AWS 等)必须在控制台放行新端口。
1. 登录云厂商控制台,找到实例对应的“安全组”或“防火墙”。
2. 添加入站规则:协议 TCP,端口 2222,授权对象 0.0.0.0/0(或特定 IP)。
3. 保存规则,通常立即生效。
第三步:同步系统防火墙规则
Ubuntu 使用 UFW:sudo ufw allow 2222/tcp
CentOS 使用 firewalld:sudo firewall-cmd `--permanent` `--add-port`=2222/tcp 后重载 sudo firewall-cmd `--reload`。
若启用 SELinux(如 CentOS),需执行sudo semanage port -a -t ssh_port_t -p tcp 2222允许新端口。
第四步:重启服务并验证
根据第一步确认的服务名重启:
sudo systemctl restart ssh # Ubuntu/Debian
sudo systemctl restart sshd # CentOS/RHEL此时不要断开当前连接。第五步:测试新端口
新开一个终端窗口(不要关闭当前窗口),使用ssh -p 2222 user@ip登录,确认能成功进入系统且命令执行正常。
第六步:停用旧端口
确认新端口登录正常后,回到原会话,注释掉配置中的 Port 22 行,并在防火墙中删除 22 端口规则(可选),最后再次重启 SSH 服务。
怎么验证是否生效
1. 检查监听状态:执行ss -tuln | grep :2222,若输出包含 sshd 进程则表示监听正常。
2. 日志检查:查看/var/log/auth.log或/var/log/secure,确认无报错。
常见坑与排查
1. 直接关闭 22 端口:在新端口未验证连通前就禁用 22 端口,一旦新配置有误,将导致无法远程登录,只能去控制台救援。
2. 忘记云安全组:系统防火墙放行了,但云平台安全组未放行,导致连接超时。
3. 防火墙命令错误:firewalld 命令参数不要加反引号,直接复制可能报错。
4. SELinux 拦截:在 CentOS/RHEL 系统中,若开启 SELinux 未执行 semanage 命令,SSH 服务可能无法绑定新端口。
5. 会话中断:操作过程中当前 SSH 会话断开,建议操作前开启屏幕共享或使用 tmux/screen 保持会话,或确保有控制台访问权限。