修改ssh端口需保留双端口过渡:先在sshd_config中添加新port(如2222)并保持port 22,再放行防火墙、处理selinux、验证监听,最后才禁用22端口并关闭密码登录。

改端口本身不防爆破,但能过滤掉 99% 的自动化扫描流量;真正锁死入口,得靠端口+密钥+防火墙三件套。
修改 sshd_config 中的 Port 行要留双端口过渡
别一上来就注释掉 Port 22。直接删或注释,极可能因防火墙没开、SELinux 拦截、或拼写错误导致彻底失连。
- 打开配置:
sudo nano /etc/ssh/sshd_config - 找到
#Port 22,取消注释,保持原样:Port 22 - 在它下方新增一行(不能合并写成
Port 22 2222):Port 2222(选 10000–65535 区间,避开常用服务端口) - 保存退出,此时 SSH 同时监听两个端口
防火墙放行新端口前先确认服务类型
不同发行版用的防火墙工具不同,命令不通用,混用会白配:
- Ubuntu/Debian(
ufw):sudo ufw allow 2222/tcp - CentOS/RHEL 7+(
firewalld):sudo firewall-cmd --permanent --add-port=2222/tcp && sudo firewall-cmd --reload - 旧版 CentOS 6(
iptables):sudo iptables -I INPUT -p tcp --dport 2222 -j ACCEPT && sudo service iptables save - 云服务器(如阿里云、腾讯云):安全组里也必须手动添加
2222/tcp入方向规则
重启 sshd 前必须验证监听状态
执行 sudo systemctl restart sshd 后,别急着关当前终端。先确认新端口真在监听:
- 检查监听:
sudo ss -tlnp | grep ':2222',输出中应含sshd进程 - 本地测试(换终端):
ssh -p 2222 user@localhost,成功再继续 - 失败?立刻查日志:
sudo journalctl -u sshd -n 50 --no-pager,重点看是否报bind: Address already in use或Permission denied(后者大概率是 SELinux 未授权)
移除 Port 22 是最后一步,且需配套动作
只有确认 2222 端口稳定可用、密钥登录已启用、防火墙无遗漏后,才动这步:
- 编辑
/etc/ssh/sshd_config,把Port 22行改为#Port 22 - 同时建议关闭密码登录:
PasswordAuthentication no(否则改端口意义不大) - 再次
sudo systemctl restart sshd - 最后用
sudo ss -tlnp | grep ':22'确认 22 端口已不监听
真正容易被忽略的是 SELinux 和云平台安全组——它们不报错,只静默丢包;哪怕配置全对,这两处漏一个,新端口就永远连不上。











