希曼日记

Ubuntu24修改ssh端口

本页目录 6
  1. 现象
  2. 根因
  3. 前置检查(改端口前必做)
  4. 修复(确认 socket 激活时)
  5. 收尾
  6. 环境约束

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 不会改变监听端口。

前置检查(改端口前必做)

  1. 是否 socket 激活: systemctl is-enabled ssh.socket → 返回 enabled 即端口被 socket 接管
  2. 当前实际监听: ss -tlnp | grep ssh → 确认 sshd 监听在哪个端口
  3. 配置 Port 行(含 drop-in 覆盖): grep -ri '^port' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
  4. 禁用密码前,先确认密钥登录在当前端口可用: ssh -p 22 root@<ip> 实测密钥可登
  5. 备份: cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

修复(确认 socket 激活时)

Text
systemctl disable --now ssh.socket # 关闭 socket 接管
systemctl enable ssh.service # 开机自启,否则重启后 38412 不监听
systemctl restart ssh.service # sshd 改读配置 Port 38412
ss -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 管防火墙。