Ubuntu 修改ssh端口
从旧博客迁移,原文写于2025/12/16,ai润色
在 Ubuntu22 之后的版本中采用了 Systemd Socket Activation 来管理 ssh 端口,在这种模式下,Systemd 负责监听端口。只有当有连接请求到达端口时,Systemd 才会启动 SSH 服务进程来处理。这意味着空闲时 SSH 服务几乎不占内存。传统的修改 ssh 配置文件的方式并不会生效,本文将指导如何将 SSH 默认端口(22)修改为自定义端口(例如 2222)。
⚠️ 高危操作预警 (必读)
- 不要关闭当前窗口: 在整个配置过程完成并在新窗口验证成功之前,绝对不要关闭当前的 SSH 连接窗口。它是你唯一的救命稻草。
- 端口选择: 请选择
1024到65535之间的端口,且避开常用端口(如 80, 443, 8080, 3306)。
第一阶段:配置防火墙 (UFW)
这是最关键的一步。 在修改 SSH 服务之前,必须先在防火墙放行新端口,否则重启服务后将立刻失联。
# 1. 放行新端口 (使用 limit 限制暴力破解频率)
sudo ufw limit 2222/tcp
# 2. 确认规则已生效
sudo ufw status
# 确保列表中能看到 2222/tcp
第二阶段:修改 SSH 端口 (二选一)
请根据您的偏好选择 方案 A 或 方案 B。不要同时混用。
🏛️ 方案 A:传统模式 (基于 sshd_config)
适用于习惯传统运维方式的用户,或旧版 Linux 系统。
-
禁用 Systemd Socket (针对 Ubuntu 22.04+): 为了确保
sshd_config生效,必须先禁用 Socket 激活模式。sudo systemctl stop ssh.socket sudo systemctl disable ssh.socket -
修改配置文件:
sudo nano /etc/ssh/sshd_config找到
#Port 22,修改为:Port 2222 -
重启服务:
sudo systemctl enable ssh.service sudo systemctl restart ssh -
检查监听状态:
sudo ss -tulpn | grep ssh # 应显示: sshd ... *:2222
🚀 方案 B:现代化模式 (基于 Systemd Socket Activation)
适用于 Ubuntu 22.04+,更节省资源,更推荐。
-
启用 Systemd Socket:
sudo systemctl disable --now ssh.service sudo systemctl enable --now ssh.socket -
创建覆盖配置 (Override): 不要直接修改原文件,创建一个 drop-in 配置文件。
sudo systemctl edit ssh.socket -
填入以下内容:
[Socket] # 第一行必须为空,用于清空默认的 22 端口绑定 ListenStream= # 第二行写入新端口 ListenStream=2222(保存并退出:
Ctrl+O->Enter->Ctrl+X) -
应用更改:
sudo systemctl daemon-reload sudo systemctl restart ssh.socket -
检查监听状态:
sudo ss -tulpn | grep ssh # 应显示: systemd ... *:2222(注:此时配置文件
/etc/ssh/sshd_config中的 Port 设置将被忽略)
第三阶段:同步 Fail2Ban 配置
必做步骤。 如果不修改这里,Fail2Ban 依然会监控 22 端口,导致新端口的暴力破解无法被拦截。
-
修改 Jail 配置:
sudo nano /etc/fail2ban/jail.local -
更新 [sshd] 部分: 找到
[sshd]区块,显式指定port。[sshd] enabled = true # 必须修改为新端口 port = 22333 # 建议:如果使用方案 B,可显式指定 backend (通常自动识别,但指定更稳) # backend = systemd -
重启 Fail2Ban:
sudo systemctl restart fail2ban -
验证状态:
sudo fail2ban-client status sshd # 确保没有报错
第四阶段:生死验证 🕵️
-
保持当前的 SSH 窗口打开不要动。
-
新开一个终端窗口(或 Termius 新连接)。
-
尝试使用新端口连接:
ssh -p 2222 root@你的服务器IP
- 如果连接成功: 🎉 恭喜!配置完成。
- 如果连接失败: 😰 别慌,回到旧窗口检查防火墙和配置,改回默认值复原。
第五阶段:收尾工作
确认新端口一切正常后,关闭旧端口以确保安全。
-
删除防火墙旧规则:
# 如果之前是 limit ssh (默认22) sudo ufw delete limit ssh # 或者 sudo ufw delete allow 22/tcp -
更新本地配置 (可选): 修改本地电脑的
~/.ssh/config,更新 Port 字段,方便以后连接。Host myvps HostName ... Port 2222
文档结束