Ubuntu系统下修改SSH默认端口的完整操作指南

 更新时间:2026年08月05日 09:07:50   作者:tianyu234  
这篇文章主要为大家详细介绍了如何在 Ubuntu 24.04 LTS 系统中修改 SSH 默认端口(22)的方法,主要包含常规配置修改和 systemd 覆写两种方案,有需要的小伙伴可以参考下
项目说明
适用系统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 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 覆写文件

sudo systemctl edit ssh

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

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

参数说明

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

保存并退出(Ctrl+OCtrl+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 -Tss 显示不一致时

选择建议

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

十、完整命令汇总

常规方法

# 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 而非 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

以上就是Ubuntu系统下修改SSH默认端口的完整操作指南的详细内容,更多关于Ubuntu修改SSH端口的资料请关注脚本之家其它相关文章!

相关文章

  • Linux使用fdisk实现磁盘分区过程图解

    Linux使用fdisk实现磁盘分区过程图解

    这篇文章主要介绍了Linux使用fdisk实现磁盘分区过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • SSM项目频繁打成war包部署,使用tomcat和maven实现热部署配置

    SSM项目频繁打成war包部署,使用tomcat和maven实现热部署配置

    这篇文章主要介绍了SSM项目频繁打成war包部署操作频繁?使用tomcat和maven实现热部署配置,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Linux的netstat命令详解

    Linux的netstat命令详解

    这篇文章主要介绍了Linux的netstat命令,netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。需要的朋友可以参考下面文章内容
    2021-09-09
  • 详解如何在 CentOS 7 中添加新磁盘而不用重启系统

    详解如何在 CentOS 7 中添加新磁盘而不用重启系统

    本篇文章主要介绍了详解如何在 CentOS 7 中添加新磁盘而不用重启系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • 虚拟机Ubuntu访问Windows的FTP或共享文件夹的解决方案

    虚拟机Ubuntu访问Windows的FTP或共享文件夹的解决方案

    在虚拟机(Ubuntu)中访问 Windows 主机的 FTP 或共享文件夹,需要根据具体需求选择方案,以下是最实用、最安全的解决方案,需要的朋友可以参考下
    2026-01-01
  • Linux中别名与二进制的使用教程

    Linux中别名与二进制的使用教程

    这篇文章主要给大家介绍了关于Linux中别名与二进制的使用方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • Ubuntu20.04安装配置GitLab的方法步骤

    Ubuntu20.04安装配置GitLab的方法步骤

    这篇文章主要介绍了Ubuntu20.04安装配置GitLab的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Linux云服务器开放端口详解

    Linux云服务器开放端口详解

    文章简要介绍了在阿里云添加安全组规则的步骤:访问官网控制台,手动添加规则,选择TCP/UDP协议,填写目标端口及源IP范围,添加备注后点击保存即可开放端口,最后提醒读者这是个人经验,欢迎参考与支持
    2025-08-08
  • 查看Linux OS内核与版本的几种命令分享

    查看Linux OS内核与版本的几种命令分享

    文章总结了四种在Linux操作系统中查看内核和版本的方法,并强调了个人经验的价值,鼓励大家参考和使用
    2024-11-11
  • apache 80端口被iis或其他服务占用怎么办

    apache 80端口被iis或其他服务占用怎么办

    80端口被占用导致apache无法正常运行,如果80端口不是iis占用,我们可以参考下面方法来查找80端口被哪个服务占用,具体操作如下
    2013-05-05

最新评论