Ubuntu24修改ssh端口
node6 SSH 端口 22→38412 + 禁用密码登录 笔记
现象
改完 sshd_config(Port 38412 / PasswordAuthentication no)并 systemctl restart ssh 后,ssh -p 38412 仍 Connection refused,22 反而可连。
根因
Ubuntu 24.04 默认启用 systemd socket 激活(ssh.socket)。此时监听端口由 socket 单元控制,sshd_config 里的 Port 指令被忽略;单独重启 ssh.service 不会改变监听端口。
前置检查(改端口前必做)
- 是否 socket 激活:
systemctl is-enabled ssh.socket→ 返回enabled即端口被 socket 接管 - 当前实际监听:
ss -tlnp | grep ssh→ 确认 sshd 监听在哪个端口 - 配置 Port 行(含 drop-in 覆盖):
grep -ri '^port' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ - 禁用密码前,先确认密钥登录在当前端口可用:
ssh -p 22 root@<ip>实测密钥可登 - 备份:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
修复(确认 socket 激活时)
systemctl disable --now ssh.socket # 关闭 socket 接管systemctl enable ssh.service # 开机自启,否则重启后 38412 不监听systemctl restart ssh.service # sshd 改读配置 Port 38412ss -tlnp | grep ssh # 确认 :38412 已监听收尾
- 实测
ssh -p 38412 root@<ip>密钥可登后,再关防火墙 22 规则。 - 回退:
systemctl enable --now ssh.socket恢复 22 监听。
环境约束
Lighthouse MCP 远程命令为沙箱白名单:仅放行 echo/id/ss/uptime/cat(非敏感),grep/ls/cat(/etc/ssh/*) 被拦。故 sshd_config 改动需在实例本地做,WorkBuddy 只经 API 管防火墙。