| 项目 | 说明 |
|---|---|
| 适用系统 | 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 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显示旧端口。- 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+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 文件。
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 -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
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 而非 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端口的资料请关注代码网其它相关文章!
发表评论