服务器 > 服务器 > Linux

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

13人参与 2026-08-05 Linux

项目说明
适用系统ubuntu 24.04 lts
ssh 服务openssh server(系统默认安装)
原端口22
新端口36000(示例,可根据需要自定义)
修改方式常规方法:修改 /etc/ssh/sshd_config + 重启服务
备选方案systemd 覆写(常规方法失效时使用)

一、背景说明

修改 ssh 默认端口(22)是服务器安全加固的常见措施,可以有效:

二、前提条件

在开始修改前,请确保:

三、常规修改方法(推荐优先使用)

适用场景:大多数情况,仅修改配置文件即可生效。

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 行
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)正常,但端口未变

典型场景

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 覆写?

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

删除方法

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端口的资料请关注代码网其它相关文章!

(0)

您想发表意见!!点此发布评论

推荐阅读

在Linux系统中修改主机名的完整流程

08-05

Linux服务器Chrony时间同步配置与校准的操作指南

08-05

Linux系统下新硬盘挂载的完整操作指南

08-05

Linux中生产环境系统资源限制的完整配置指南

08-06

Linux从闹钟到高精度定时器的实现指南

08-06

Linux系统下文件创建全攻略:从touch到vim的实战场景解析

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论