13人参与 • 2026-08-05 • Linux
| 项目 | 说明 |
|---|---|
| 适用系统 | ubuntu 24.04 lts |
| ssh 服务 | openssh server(系统默认安装) |
| 原端口 | 22 |
| 新端口 | 36000(示例,可根据需要自定义) |
| 修改方式 | 常规方法:修改 /etc/ssh/sshd_config + 重启服务 |
| 备选方案 | systemd 覆写(常规方法失效时使用) |
修改 ssh 默认端口(22)是服务器安全加固的常见措施,可以有效:
在开始修改前,请确保:
sudo 权限。适用场景:大多数情况,仅修改配置文件即可生效。
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))
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
sudo sshd -t
sudo systemctl restart ssh
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))
sudo sshd -t | grep -e "^port|^listenaddress"
预期输出:
port 36000
listenaddress [::]:36000
listenaddress 0.0.0.0:36000
当常规方法修改后,出现以下情况时,需要使用 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 显示旧端口。步骤 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 文件。
当以下情况发生时,可以删除覆写文件,恢复到常规配置模式:
sshd_config 中的 port 已生效)。删除方法:
sudo rm -f /etc/systemd/system/ssh.service.d/override.conf sudo systemctl daemon-reload sudo systemctl restart ssh
# 放行新端口 sudo ufw allow 36000/tcp # 重载防火墙 sudo ufw reload # 查看已放行端口 sudo ufw status | grep 36000
建议:在确认新端口可用前,不要删除 22 端口的放行规则。
如果服务器在云上(阿里云、腾讯云、aws、华为云等),需在控制台安全组中添加入站规则:
| 参数 | 值 |
|---|---|
| 协议 | tcp |
| 端口 | 36000 |
| 来源 | 0.0.0.0/0(或指定 ip 段) |
这是最关键的一步!请务必按以下顺序操作:
不要关闭当前已连接的 ssh 窗口,否则如果新端口配置失败,你将失去对服务器的访问。
ssh -p 36000 用户名@服务器ip
如果使用密钥登录:
ssh -p 36000 -i ~/.ssh/id_rsa 用户名@服务器ip
成功标志:输入密码后正常登录,看到 shell 提示符。
立即在当前窗口中检查并修复:
# 检查服务状态 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 天,确认新端口完全稳定后再关闭,避免因配置遗漏导致失联。
如果新端口无法连接,且当前 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
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
# 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端口的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论