SSH 默认监听 22 端口,互联网上有大量自动化扫描工具持续扫描 22 端口并尝试登录。将 SSH 改到非标准端口是最简单的降噪措施——它不能替代密钥登录和防火墙,但能让服务器日志清净许多。本文给出完整、安全的修改步骤,重点强调如何避免把自己锁在服务器外面。
本文要点
- 编辑 sshd_config 修改监听端口
- 在防火墙放行新端口
- 重启 SSH 并用新端口测试连接
- 测试成功后关闭旧端口
操作顺序很关键
修改 SSH 端口最容易犯的错误是改完直接重启,结果连不上了。正确的操作顺序是:
- 编辑 sshd_config,修改端口号
- 在防火墙放行新端口
- 重启 SSH 服务
- 保持当前连接,新开终端用新端口测试
- 确认成功后,防火墙关闭旧端口
绝不先断开再测试
在确认用新端口能成功连接之前,不要主动断开当前的 SSH 会话。一旦配置有误,你还有机会通过现有连接修正;断开后只能靠 KiwiVM 紧急控制台救援。
第一步:编辑 sshd_config
nano /etc/ssh/sshd_config找到 Port 这一行,修改为你选定的新端口(推荐 1024–65535 之间,避开常见服务端口):
# Port 22
Port 2222也可以同时保留 22 端口(两行并存)作为过渡,测试通过后再删除:
Port 22
Port 2222第二步:防火墙放行新端口
使用 ufw(Debian/Ubuntu)
ufw allow 2222/tcp
ufw reload使用 firewalld(CentOS/AlmaLinux)
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload先放行,后重启
务必先在防火墙放行新端口,再重启 SSH 服务。顺序颠倒的话,SSH 已在新端口监听但防火墙拒绝连接,同样会让你无法登录。
第三步:重启 SSH 服务
systemctl restart ssh # Debian/Ubuntu
systemctl restart sshd # CentOS/AlmaLinux第四步:新开窗口测试新端口
保持当前连接,在新的终端窗口测试:
ssh root@198.51.100.23 -p 2222如果成功登录,说明新端口配置正常。
第五步:关闭旧端口
确认新端口可用后,从防火墙移除旧端口,并从 sshd_config 删除旧 Port 行,再次重启 SSH:
# ufw 关闭 22
ufw delete allow 22/tcp
ufw reload
# firewalld 关闭 22
firewall-cmd --permanent --remove-port=22/tcp
firewall-cmd --reload常用端口选择建议
| 端口范围 | 说明 |
|---|---|
| 1–1023 | 系统保留端口,不推荐用于 SSH |
| 1024–49151 | 注册端口,部分有特定用途,选择时避开已知服务 |
| 49152–65535 | 动态/私有端口,最不容易与其他服务冲突 |
同步更新本地配置
如果你用 ~/.ssh/config 保存了服务器别名,记得更新端口号:
Host bwh
HostName 198.51.100.23
User root
Port 2222小结
- 先改配置 → 防火墙放行新端口 → 重启 SSH → 新窗口测试 → 确认后关旧端口
- 保持当前连接直到新端口测试成功
- 修改 ~/.ssh/config 中对应的端口号
- 改端口只是降噪,真正的安全还需密钥登录 + 防火墙
常见问题
改了端口后连不上服务器怎么办?
用 KiwiVM 的紧急控制台登录,检查 sshd_config 中端口是否正确、防火墙是否放行了新端口,修正后重启 SSH 服务。
新端口选多少合适?
推荐选 49152–65535 之间的数字,与其他常见服务端口冲突最小,也更难被扫描工具枚举到。
改端口能完全防止暴力破解吗?
不能。改端口只能减少扫描噪音,真正防止暴力破解需要同时配置 SSH 密钥登录并禁用密码认证。