Ubuntu系统下修改SSH默认端口的完整操作指南
| 项目 | 说明 |
|---|---|
| 适用系统 | Ubuntu 24.04 LTS |
| SSH 服务 | OpenSSH Server(系统默认安装) |
| 原端口 | 22 |
| 新端口 | 36000(示例,可根据需要自定义) |
| 修改方式 | 常规方法:修改 /etc/ssh/sshd_config + 重启服务 |
| 备选方案 | systemd 覆写(常规方法失效时使用) |
一、背景说明
修改 SSH 默认端口(22)是服务器安全加固的常见措施,可以有效:
- 减少暴力 破解攻击(扫描脚本默认只扫 22 端口)
- 降低日志中的无效登录尝试数量
- 提升服务器的整体安全性
二、前提条件
在开始修改前,请确保:
- 你拥有服务器的 root 权限 或
sudo权限。 - 当前 SSH 连接保持开启(非常重要!)。
- 你已准备好备用连接方式(如云控制台 VNC),以防修改失误导致无法登录。
三、常规修改方法(推荐优先使用)
适用场景:大多数情况,仅修改配置文件即可生效。
3.1 检查当前 SSH 端口
sudo ss -tlnp | grep ssh
默认输出:
LISTEN 0 4096 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=xxx,fd=3))
LISTEN 0 4096 [::]:22 [::]:* users:(("sshd",pid=xxx,fd=4))
3.2 修改 SSH 配置文件
sudo vim /etc/ssh/sshd_config
找到 #Port 22 这一行,修改为:
Port 36000 # 禁止root远程登录 PermitRootLogin no # 关闭密码登录(有密钥再开) PasswordAuthentication no # 禁用空密码 PermitEmptyPasswords no # 最大认证尝试次数防暴力 破解 MaxAuthTries 3
注意:
- 如果文件中有多个
Port行,只保留一个,避免冲突。 - 行首不能有
#(注释符)。
快速命令(如果你更习惯用命令操作):
# 删除所有已有的 Port 行 sudo sed -i '/^Port/d' /etc/ssh/sshd_config # 添加新端口 echo "Port 36000" | sudo tee -a /etc/ssh/sshd_config
3.3 测试配置文件语法
sudo sshd -t
- 无输出:配置正确,可以继续。
- 有错误输出:根据提示修复后再重启。
3.4 重启 SSH 服务
sudo systemctl restart ssh
3.5 验证新端口监听
sudo ss -tlnp | grep ssh
预期输出:
LISTEN 0 4096 0.0.0.0:36000 0.0.0.0:* users:(("sshd",pid=xxx,fd=3))
LISTEN 0 4096 [::]:36000 [::]:* users:(("sshd",pid=xxx,fd=4))
3.6 验证配置加载
sudo sshd -T | grep -E "^port|^listenaddress"
预期输出:
port 36000
listenaddress [::]:36000
listenaddress 0.0.0.0:36000
四、systemd 覆写方案(备选方案)
4.1 什么时候使用?
当常规方法修改后,出现以下情况时,需要使用 systemd 覆写:
| 检查项 | 正常结果 | 异常结果(需使用覆写方案) |
|---|---|---|
sudo sshd -T | grep port | port 36000 | port 22(配置未加载) |
sudo ss -tlnp | grep ssh | 0.0.0.0:36000 | 0.0.0.0:22(仍监听旧端口) |
sudo systemctl status ssh | active (running) | 正常,但端口未变 |
典型场景:
- 配置文件中的
Port已正确修改,但重启后仍监听旧端口。 sshd -T显示新端口,但ss显示旧端口。- systemd 缓存或残留进程导致常规方法失效。
4.2 systemd 覆写操作步骤
步骤 1:创建 systemd 覆写文件
sudo systemctl edit ssh
在弹出的编辑器中粘贴以下内容:
[Service] ExecStart= ExecStart=/usr/sbin/sshd -D -p 36000
参数说明:
| 配置项 | 说明 |
|---|---|
ExecStart=(空行) | 清空默认的启动命令 |
ExecStart=/usr/sbin/sshd -D -p 36000 | 指定新启动命令,-p 36000 强制绑定端口 |
保存并退出(Ctrl+O,Ctrl+X)。
步骤 2:重载 systemd 配置
sudo systemctl daemon-reload
步骤 3:重启 SSH 服务
sudo systemctl restart ssh
步骤 4:验证端口监听
sudo ss -tlnp | grep ssh
预期输出显示 0.0.0.0:36000。
步骤 5:确认覆写文件已创建
ls -la /etc/systemd/system/ssh.service.d/
应看到 override.conf 文件。
4.3 何时删除 systemd 覆写?
当以下情况发生时,可以删除覆写文件,恢复到常规配置模式:
- 你确认常规方法已正常工作(即
sshd_config中的Port已生效)。 - 你想恢复到标准的启动方式,避免 systemd 覆写干扰后续配置变更。
删除方法:
sudo rm -f /etc/systemd/system/ssh.service.d/override.conf sudo systemctl daemon-reload sudo systemctl restart ssh
五、防火墙配置
5.1 Ubuntu UFW 防火墙
# 放行新端口 sudo ufw allow 36000/tcp # 重载防火墙 sudo ufw reload # 查看已放行端口 sudo ufw status | grep 36000
建议:在确认新端口可用前,不要删除 22 端口的放行规则。
5.2 云服务商安全组
如果服务器在云上(阿里云、腾讯云、AWS、华为云等),需在控制台安全组中添加入站规则:
| 参数 | 值 |
|---|---|
| 协议 | TCP |
| 端口 | 36000 |
| 来源 | 0.0.0.0/0(或指定 IP 段) |
六、测试新端口连接
这是最关键的一步!请务必按以下顺序操作:
6.1 保持当前 SSH 窗口打开
不要关闭当前已连接的 SSH 窗口,否则如果新端口配置失败,你将失去对服务器的访问。
6.2 另开一个新终端测试
ssh -p 36000 用户名@服务器IP
如果使用密钥登录:
ssh -p 36000 -i ~/.ssh/id_rsa 用户名@服务器IP
成功标志:输入密码后正常登录,看到 shell 提示符。
6.3 如果新端口连接失败
立即在当前窗口中检查并修复:
# 检查服务状态 sudo systemctl status ssh # 检查端口监听 sudo ss -tlnp | grep ssh # 查看日志 sudo journalctl -u ssh -n 20
七、确认成功后清理旧端口(可选)
确认可以通过新端口正常登录后,你可以选择移除 22 端口的防火墙规则。
sudo ufw delete allow 22/tcp sudo ufw reload
安全建议:生产环境建议先保留 22 端口 1~2 天,确认新端口完全稳定后再关闭,避免因配置遗漏导致失联。
八、回滚方案(应急)
8.1 回滚常规配置
如果新端口无法连接,且当前 SSH 窗口仍保持打开,立即执行以下命令恢复:
# 恢复配置文件中的 Port 22 sudo sed -i '/^Port/d' /etc/ssh/sshd_config echo "Port 22" | sudo tee -a /etc/ssh/sshd_config # 测试配置 sudo sshd -t # 重启 SSH 服务 sudo systemctl restart ssh # 验证 sudo ss -tlnp | grep ssh
8.2 回滚 systemd 覆写(如果使用过)
sudo rm -f /etc/systemd/system/ssh.service.d/override.conf sudo systemctl daemon-reload sudo systemctl restart ssh
然后用旧方式连接:
ssh 用户名@服务器IP
九、两种方法对比与选择
| 对比项 | 常规方法 | systemd 覆写方案 |
|---|---|---|
| 操作复杂度 | 低(仅修改一个配置文件) | 中(需创建 systemd 覆写) |
| 适用场景 | 大多数情况 | 常规方法失效时 |
| 维护性 | 好(配置集中在 sshd_config) | 一般(配置分散在两处) |
| 优先级 | 优先使用 | 备用方案 |
| 何时使用 | 首次修改 SSH 端口 | sshd -T 和 ss 显示不一致时 |
选择建议:
- 首次修改:直接使用常规方法。
- 常规方法失败:出现
sshd -T显示新端口但ss显示旧端口时,使用 systemd 覆写。 - 恢复常规:使用覆写成功后,可考虑删除覆写文件,恢复正常模式。
十、完整命令汇总
常规方法
# 1. 修改配置 sudo sed -i '/^Port/d' /etc/ssh/sshd_config echo "Port 36000" | sudo tee -a /etc/ssh/sshd_config # 2. 测试配置 sudo sshd -t # 3. 重启服务 sudo systemctl restart ssh # 4. 查看监听 sudo ss -tlnp | grep ssh # 5. 防火墙放行 sudo ufw allow 36000/tcp sudo ufw reload # 6. 测试连接(另开终端) ssh -p 36000 用户名@服务器IP
systemd 覆写方案(备选)
# 1. 创建覆写文件 sudo systemctl edit ssh # 粘贴: # [Service] # ExecStart= # ExecStart=/usr/sbin/sshd -D -p 36000 # 2. 重载并重启 sudo systemctl daemon-reload sudo systemctl restart ssh # 3. 验证 sudo ss -tlnp | grep ssh
十一、常见问题排查
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
Connection refused | 防火墙/安全组未放行新端口 | 检查 UFW 和云安全组规则 |
ssh -T 显示 port 22 而非新端口 | 配置文件未正确保存 | 检查 /etc/ssh/sshd_config 中是否有 Port 36000 且未被注释 |
ss 显示 22 而非 36000 | systemd 缓存或残留进程 | 使用 systemd 覆写方案 |
| 重启 SSH 后无法连接 | 配置错误导致服务启动失败 | 使用云控制台 VNC 登录,执行回滚方案 |
| 端口被其他服务占用 | 与其他服务端口冲突 | 更换端口号,或 sudo ss -tlnp | grep 36000 查看占用进程 |
十二、安装信息汇总
| 项目 | 值 |
|---|---|
| SSH 版本 | OpenSSH Server |
| 原端口 | 22 |
| 新端口 | 36000(示例) |
| 配置文件 | /etc/ssh/sshd_config |
| systemd 覆写路径 | /etc/systemd/system/ssh.service.d/override.conf |
| 测试配置 | sudo sshd -t |
| 服务管理 | sudo systemctl restart ssh |
| 测试连接 | ssh -p 36000 user@IP |
| 防火墙规则 | sudo ufw allow 36000/tcp |
以上就是Ubuntu系统下修改SSH默认端口的完整操作指南的详细内容,更多关于Ubuntu修改SSH端口的资料请关注脚本之家其它相关文章!
相关文章
SSM项目频繁打成war包部署,使用tomcat和maven实现热部署配置
这篇文章主要介绍了SSM项目频繁打成war包部署操作频繁?使用tomcat和maven实现热部署配置,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2019-11-11
虚拟机Ubuntu访问Windows的FTP或共享文件夹的解决方案
在虚拟机(Ubuntu)中访问 Windows 主机的 FTP 或共享文件夹,需要根据具体需求选择方案,以下是最实用、最安全的解决方案,需要的朋友可以参考下2026-01-01


最新评论