SSH 默认监听 22 端口,互联网上有大量自动化扫描工具持续扫描 22 端口并尝试登录。将 SSH 改到非标准端口是最简单的降噪措施——它不能替代密钥登录和防火墙,但能让服务器日志清净许多。本文给出完整、安全的修改步骤,重点强调如何避免把自己锁在服务器外面。

本文要点

  • 编辑 sshd_config 修改监听端口
  • 在防火墙放行新端口
  • 重启 SSH 并用新端口测试连接
  • 测试成功后关闭旧端口

操作顺序很关键

修改 SSH 端口最容易犯的错误是改完直接重启,结果连不上了。正确的操作顺序是:

  1. 编辑 sshd_config,修改端口号
  2. 在防火墙放行新端口
  3. 重启 SSH 服务
  4. 保持当前连接,新开终端用新端口测试
  5. 确认成功后,防火墙关闭旧端口

绝不先断开再测试

在确认用新端口能成功连接之前,不要主动断开当前的 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 密钥登录并禁用密码认证。