当前位置: 首页 > news >正文

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

http://www.jsqmd.com/news/1204688/

相关文章:

  • 西安万国回收价格查询及靠谱回收平台实测排行(2026年7月最新数据) - 诚收名表回收平台
  • Linux GPIO驱动开发与调试实战指南
  • C++监听者模式:从原理到现代实现与实战应用
  • 具身智能四大技术路线:VLA、大小脑、世界模型与强化学习
  • Netty ByteToMessageDecoder 中 ByteBuf 的readerIndex 详解
  • ABAP Web Service集成SAML 2.0:从配置到用户映射的完整实战指南
  • Hermes便携IDE:U盘级AI Agent开发环境全平台部署指南
  • JWT双令牌认证与Redis黑名单:构建高可用分布式会话方案
  • Ventoy多系统启动U盘制作与优化全攻略
  • 【标题】2026年赤峰经济纠纷律师推荐 张洛溪7年民商法律实务经验 - 本地品牌推荐
  • C++多文件编程:从编译链接原理到项目工程化实践
  • C++性能优化实战:从硬件原理到代码调优的完整指南
  • 一文读懂 | 欧盟《网络弹性法案》(CRA)
  • agent学习Day5——Ruff、日志与结构化 LLM 输出
  • 冷柜温控器为什么要做远程监控和异常告警
  • Windows定时任务设置与schtasks命令详解
  • Python五子棋实战:从控制台到图形界面的完整开发指南
  • 人形机器人产品经理实战指南:从物理约束到场景落地
  • C++环境搭建全攻略:从零到一运行Hello World
  • 劳力士中国官方售后服务中心|地址与客户服务热线权威信息公示(2026年7月更新) - 劳力士服务中心
  • springboot新能源汽车充电桩预约与使用管理系统---附源码21146
  • 我见过最厉害的产品运营,都悄悄戒掉了“技巧”
  • C#动态调用C/C++ DLL:告别DLL地狱,实现优雅降级与跨平台部署
  • 先楫HPM5361EVK开发板与红外传感器集成开发指南
  • Windows 11 23H2架构解析与安装指南
  • Windows驱动开发必备:Windbg快捷键肌肉记忆训练指南
  • C++实现Raft共识算法:从状态机设计到异步工程实践
  • 2026 年现阶段凉山州靠谱的镀金镀银电子料回收制造企业深度解析,别再扔了!这批“废料”能帮你赚回多少钱? - 领域鉴赏官
  • VLA模型本质是动作片段搜索引擎,非通用机器人智能
  • C++ STL queue容器详解:从FIFO原理到多线程实战应用