修改 SSH 默认端口能有效减少自动化脚本对 22 端口的扫描噪音,但无法替代密钥认证。操作前必须确认防火墙已放行新端口,否则会导致服务器失联。
先说结论:更换 SSH 端口属于安全加固中的“隐匿措施”,适合减少日志噪音和低级暴力破解,不能替代密钥登录。
- 先判断:确认云服务商安全组是否允许自定义 TCP 端口,避免网络策略拦截。
- 优先做:在保持当前 SSH 连接不断开的情况下配置新端口并测试连通性。
- 再验证:新端口连接成功后,再重启 SSH 服务并关闭旧端口。
命令速用版
# 1. 编辑 SSH 配置文件
sudo nano /etc/ssh/sshd_config
# 2. 找到 Port 22,改为例如 Port 2222
# 3. 重启 SSH 服务
sudo systemctl restart sshd
# 4. 测试新端口连接(新开终端窗口)
ssh -p 2222 user@your_server_ip为什么会这样
更换端口主要目的是降低被自动化扫描工具发现的概率。互联网上存在大量脚本全天候扫描 22 端口的活跃 IP,修改端口后能显著减少认证失败日志,但无法防御针对特定端口的定向攻击。
分步处理
步骤 1:备份配置文件
修改前备份原配置,确保配置错误时可快速回滚。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak步骤 2:修改 SSH 端口
编辑配置文件,取消注释 Port 行并修改数字,建议使用 1024-65535 之间的非常用端口。
sudo nano /etc/ssh/sshd_config
# 修改为:Port 2222步骤 3:配置防火墙放行
在重启 SSH 服务前,必须在系统防火墙和云服务商安全组中放行新端口 TCP 协议。
# Ubuntu UFW 示例
sudo ufw allow 2222/tcp
# CentOS Firewalld 示例
sudo firewall-cmd `--permanent` `--add-port`=2222/tcp
sudo firewall-cmd `--reload`步骤 4:重启服务并测试
重启 SSH 服务,不要关闭当前连接窗口,新开一个终端尝试连接新端口。
sudo systemctl restart sshd
# 新窗口执行
ssh -p 2222 user@your_server_ip步骤 5:关闭旧端口(可选)
确认新端口稳定连接后,可在配置文件中注释掉 Port 22 并再次重启服务。
怎么验证是否生效
使用网络状态检查命令确认 SSH 监听端口已变更,并通过 verbose 模式验证连接路径。
# 检查监听端口
sudo ss -tulpn | grep sshd
# 查看连接详情
ssh -v -p 2222 user@your_server_ip若输出显示 Connecting to port 2222 且无 Connection refused 错误,则配置生效。
常见坑
- 云安全组未放行:系统防火墙放行了但云平台安全组拦截,导致新端口不通。
- SELinux 拦截:CentOS/RHEL 开启 SELinux 时,非标准端口可能被阻止,需调整策略。
- 配置语法错误:sshd_config 缩进或拼写错误会导致服务无法启动,务必先用 -t 参数测试配置。
- 提前断开旧连接:在新端口验证成功前关闭旧会话,一旦新端口不通将无法远程修复。
常见问题
更换端口能彻底防止暴力破解吗?
不能。更换端口只能减少被随机扫描的概率,无法防御定向攻击,必须配合密钥认证使用。
可以选择任意端口号吗?
建议使用 1024 到 65535 之间的端口,避免使用系统保留端口或常见服务端口以防冲突。
配置后无法连接怎么办?
保持原会话不断开,检查云安全组规则,使用 ssh -v 查看报错信息,必要时还原备份配置文件。