Ubuntu SSH 端口修改指南

📅 2026/7/17 5:32:28 👁️ 阅读次数 📝 编程学习
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 端口

sudoss-tlnp|grepssh

默认输出:

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 配置文件

sudovim/etc/ssh/sshd_config

找到#Port 22这一行,修改为:

Port 36000 # 禁止root远程登录 PermitRootLogin no # 关闭密码登录(有密钥再开) PasswordAuthentication no # 禁用空密码 PermitEmptyPasswords no # 最大认证尝试次数防暴力破解 MaxAuthTries 3

注意

  • 如果文件中有多个Port行,只保留一个,避免冲突。
  • 行首不能有#(注释符)。

快速命令(如果你更习惯用命令操作):

# 删除所有已有的 Port 行sudosed-i'/^Port/d'/etc/ssh/sshd_config# 添加新端口echo"Port 36000"|sudotee-a/etc/ssh/sshd_config

3.3 测试配置文件语法

sudosshd-t
  • 无输出:配置正确,可以继续。
  • 有错误输出:根据提示修复后再重启。

3.4 重启 SSH 服务

sudosystemctl restartssh

3.5 验证新端口监听

sudoss-tlnp|grepssh

预期输出

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 验证配置加载

sudosshd-T|grep-E"^port|^listenaddress"

预期输出

port 36000 listenaddress [::]:36000 listenaddress 0.0.0.0:36000

四、systemd 覆写方案(备选方案)

4.1 什么时候使用?

常规方法修改后,出现以下情况时,需要使用 systemd 覆写:

检查项正常结果异常结果(需使用覆写方案)
sudo sshd -T | grep portport 36000port 22(配置未加载)
sudo ss -tlnp | grep ssh0.0.0.0:360000.0.0.0:22(仍监听旧端口)
sudo systemctl status sshactive (running)正常,但端口未变

典型场景

  • 配置文件中的Port已正确修改,但重启后仍监听旧端口。
  • sshd -T显示新端口,但ss显示旧端口。
  • systemd 缓存或残留进程导致常规方法失效。

4.2 systemd 覆写操作步骤

步骤 1:创建 systemd 覆写文件
sudosystemctl editssh

在弹出的编辑器中粘贴以下内容:

[Service] ExecStart= ExecStart=/usr/sbin/sshd -D -p 36000

参数说明

配置项说明
ExecStart=(空行)清空默认的启动命令
ExecStart=/usr/sbin/sshd -D -p 36000指定新启动命令,-p 36000强制绑定端口

保存并退出(Ctrl+OCtrl+X)。

步骤 2:重载 systemd 配置
sudosystemctl daemon-reload
步骤 3:重启 SSH 服务
sudosystemctl restartssh
步骤 4:验证端口监听
sudoss-tlnp|grepssh

预期输出显示0.0.0.0:36000

步骤 5:确认覆写文件已创建
ls-la/etc/systemd/system/ssh.service.d/

应看到override.conf文件。

4.3 何时删除 systemd 覆写?

当以下情况发生时,可以删除覆写文件,恢复到常规配置模式:

  • 你确认常规方法已正常工作(即sshd_config中的Port已生效)。
  • 你想恢复到标准的启动方式,避免 systemd 覆写干扰后续配置变更。

删除方法

sudorm-f/etc/systemd/system/ssh.service.d/override.confsudosystemctl daemon-reloadsudosystemctl restartssh

五、防火墙配置

5.1 Ubuntu UFW 防火墙

# 放行新端口sudoufw allow36000/tcp# 重载防火墙sudoufw reload# 查看已放行端口sudoufw status|grep36000

建议:在确认新端口可用前,不要删除 22 端口的放行规则

5.2 云服务商安全组

如果服务器在云上(阿里云、腾讯云、AWS、华为云等),需在控制台安全组中添加入站规则:

参数
协议TCP
端口36000
来源0.0.0.0/0(或指定 IP 段)

六、测试新端口连接

这是最关键的一步!请务必按以下顺序操作:

6.1 保持当前 SSH 窗口打开

不要关闭当前已连接的 SSH 窗口,否则如果新端口配置失败,你将失去对服务器的访问。

6.2 另开一个新终端测试

ssh-p36000用户名@服务器IP

如果使用密钥登录:

ssh-p36000-i~/.ssh/id_rsa 用户名@服务器IP

成功标志:输入密码后正常登录,看到 shell 提示符。

6.3 如果新端口连接失败

立即在当前窗口中检查并修复:

# 检查服务状态sudosystemctl statusssh# 检查端口监听sudoss-tlnp|grepssh# 查看日志sudojournalctl-ussh-n20

七、确认成功后清理旧端口(可选)

确认可以通过新端口正常登录后,你可以选择移除 22 端口的防火墙规则。

sudoufw delete allow22/tcpsudoufw reload

⚠️安全建议:生产环境建议先保留 22 端口 1~2 天,确认新端口完全稳定后再关闭,避免因配置遗漏导致失联。


八、回滚方案(应急)

8.1 回滚常规配置

如果新端口无法连接,且当前 SSH 窗口仍保持打开,立即执行以下命令恢复:

# 恢复配置文件中的 Port 22sudosed-i'/^Port/d'/etc/ssh/sshd_configecho"Port 22"|sudotee-a/etc/ssh/sshd_config# 测试配置sudosshd-t# 重启 SSH 服务sudosystemctl restartssh# 验证sudoss-tlnp|grepssh

8.2 回滚 systemd 覆写(如果使用过)

sudorm-f/etc/systemd/system/ssh.service.d/override.confsudosystemctl daemon-reloadsudosystemctl restartssh

然后用旧方式连接:

ssh用户名@服务器IP

九、两种方法对比与选择

对比项常规方法systemd 覆写方案
操作复杂度低(仅修改一个配置文件)中(需创建 systemd 覆写)
适用场景大多数情况常规方法失效时
维护性好(配置集中在sshd_config一般(配置分散在两处)
优先级优先使用备用方案
何时使用首次修改 SSH 端口sshd -Tss显示不一致时

选择建议

  1. 首次修改:直接使用常规方法。
  2. 常规方法失败:出现sshd -T显示新端口但ss显示旧端口时,使用 systemd 覆写。
  3. 恢复常规:使用覆写成功后,可考虑删除覆写文件,恢复正常模式。

十、完整命令汇总

常规方法

# 1. 修改配置sudosed-i'/^Port/d'/etc/ssh/sshd_configecho"Port 36000"|sudotee-a/etc/ssh/sshd_config# 2. 测试配置sudosshd-t# 3. 重启服务sudosystemctl restartssh# 4. 查看监听sudoss-tlnp|grepssh# 5. 防火墙放行sudoufw allow36000/tcpsudoufw reload# 6. 测试连接(另开终端)ssh-p36000用户名@服务器IP

systemd 覆写方案(备选)

# 1. 创建覆写文件sudosystemctl editssh# 粘贴:# [Service]# ExecStart=# ExecStart=/usr/sbin/sshd -D -p 36000# 2. 重载并重启sudosystemctl daemon-reloadsudosystemctl restartssh# 3. 验证sudoss-tlnp|grepssh

十一、常见问题排查

问题现象可能原因解决方法
Connection refused防火墙/安全组未放行新端口检查 UFW 和云安全组规则
ssh -T显示port 22而非新端口配置文件未正确保存检查/etc/ssh/sshd_config中是否有Port 36000且未被注释
ss显示 22 而非 36000systemd 缓存或残留进程使用 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

文档版本:3.0
适用系统:Ubuntu 24.04 LTS
最后更新:2026-07-16