该模块的功能 #
SSH 是进入你服务器的大门:你通过这条加密通道连接并管理它。这扇门是否安装妥当——配上合适的钥匙、没有多余的锁——正是安全服务器与暴露服务器之间的区别。
ssh 模块把这项远程访问的各类任务汇聚到一条命令中:管理用户的授权密钥(添加、列出、移除),控制服务器向客户端表明身份所用的 host key,显示活动会话,并检查或重新应用你配置中定义的 sshd 加固。每一次触及 sshd 的操作都会先校验配置(sshd -t),以免一次错误的改动把你锁在门外。
在更改密钥或重启 sshd 时,保持一个已打开的会话:这样即使出问题,你仍在里面可以修正。模块默认对受管用户 ubuntu 操作;用 --user 对其他用户操作。
常见任务 #
选择你想做的事。每个方案都附有写好的命令——只需把用户或密钥换成你自己的,然后点击复制。
1
查看 SSH 访问状态
一眼确认 sshd 已激活且配置正确。
用 ubuntu 用户通过 SSH 连接到你的服务器,然后运行:
$ sudo imaxe ssh status需要用于脚本?添加 --json,你会获得同样的机器可读信息:
$ sudo imaxe ssh status --jsonsshd 是否激活、监听在哪个端口,以及已应用加固的摘要。2
添加或移除授权密钥
给一台新机器授予访问权,或吊销一台不再使用的。
先看看受管用户当前授权了哪些密钥:
$ sudo imaxe ssh keys list把公钥作为参数传入以添加(或使用 - 从标准输入读取):
$ sudo imaxe ssh keys add "ssh-ed25519 AAAAC3Nz... ana@portatil" --comment "ana@portatil"不再需要它了?按其指纹或注释移除:
$ sudo imaxe ssh keys remove "ana@portatil"authorized_keys 已更新。用 keys list 确认结果。3
克隆后重新生成 host key
从 AMI 创建机器之后必不可少。
克隆镜像时,所有副本都继承了相同的服务器身份。为这台机器生成一套全新且唯一的 host key:
$ sudo imaxe ssh hostkeys regenerate --yes4
检查并重新应用加固
确认 sshd 仍按应有的方式配置,若不然则纠正它。
将当前加固与期望的(即你配置所定义的)进行比对:
$ sudo imaxe ssh harden show有差异?从 YAML 重新应用加固,并安全地重载 sshd:
$ sudo imaxe ssh harden reapplysshd 在不中断你会话的情况下重载。5
查看会话并重启 sshd
看看谁已连接,并放心地应用更改而不必担心被锁在外面。
列出此刻活动的 SSH 会话:
$ sudo imaxe ssh sessions要应用配置更改,优先使用 reload(不会中断连接);仅在需要完整重启时才用 restart。两者都会先校验配置:
$ sudo imaxe ssh reload
$ sudo imaxe ssh restart在重启 sshd 或更改端口之前,保留一个打开的第二应急会话。如果在 hostkeys regenerate 之后重连时出现 host key 不同的提示,这是预期的:接受新身份即可。
用法概要 #
imaxe ssh <subcomando> [<subcomando-anidado>] [argumentos] [flags]读取或修改 sshd、授权密钥或 host key 的操作需要 root 权限(使用 sudo)。keys、hostkeys 和 harden 组各自归集其嵌套子命令。给 status、sessions、keys list 或 harden show 添加 --json,可获得适合脚本的输出。
子命令 #
| 子命令 | 功能 | 相关标志 |
|---|---|---|
| status | sshd 状态:是否激活、端口以及加固摘要。 | --json |
| keys list | 列出受管用户的授权密钥。 | --user, --json |
| keys add | 添加一个公钥(来自参数或 stdin)。 | --user, --comment |
| keys remove | 按指纹或注释移除一个密钥。 | --user |
| hostkeys regenerate | 重新生成 host key(克隆 AMI 后至关重要;会改变指纹)。 | --yes |
| sessions | 列出活动的 SSH 会话。 | --json |
| harden show | 显示当前加固与期望加固的对比。 | --json |
| harden reapply | 从 YAML 重新应用加固并重载 sshd。 | — |
| restart | 先校验配置(sshd -t)再重启 sshd。 | — |
| reload | 先校验配置(sshd -t)再重载 sshd。 | — |
参数与标志 #
| 参数 / 标志 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| <clave> 必填 | string | — | 在 keys add 中:公钥,或用 - 从 stdin 读取。 |
| <selector> 必填 | string | — | 在 keys remove 中:要移除密钥的指纹(SHA256:...)或注释。 |
| --user | string | ubuntu | 要查询或修改其 authorized_keys 的用户(在 keys list/add/remove 中)。 |
| --comment | string | — | 在 keys add 中:关联到密钥的注释,便于之后识别。 |
| --yes | bool | false | 在 hostkeys regenerate 中:不询问直接确认(会改变客户端可见的指纹)。 |
| --json | bool | false | 在 status、sessions、keys list 和 harden show 中:以 JSON 形式在 stdout 输出结果。 |
文件与路径 #
| 路径 | 内容 |
|---|---|
| /etc/imaxe/ssh.yml | 模块配置:端口、登录策略(root、密码、公钥)、允许的用户、受管用户以及 host key 的重新生成。 |
| /home/<usuario>/.ssh/authorized_keys | 受管用户的授权公钥,由 keys add/remove 修改。 |
| /etc/ssh/sshd_config.d/ | 应用加固的 sshd 配置片段。 |
| /etc/ssh/ssh_host_*_key | 标识服务器身份的 host key,由 hostkeys regenerate 更新。 |
ssh.yml 示例:
port: 22
permit_root_login: "no"
password_authentication: "no"
pubkey_authentication: "yes"
allow_users: []
managed_user: ubuntu
hostkeys:
regenerate_on_first_boot: true退出码与日志 #
每次执行都会返回一个退出码,你可以用 echo $? 查看——便于在脚本中串联:
sshd -t 校验失败;未应用任何更改。在调试时实时跟踪服务日志:
$ sudo journalctl -u ssh -f
$ sudo imaxe ssh harden show --json故障排查 #
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 出现 CONFIG(退出码 3) | 加固或某次手动更改使 sshd 的配置无效。 | 用 imaxe ssh harden show 检查差异并纠正;校验会阻止应用损坏的配置。 |
| 重连时提示 host key 不同 | host key 已重新生成(克隆 AMI 后属预期)。 | 这是正常的:在客户端接受新身份并更新你的 known_hosts。 |
keys add 返回 NOTFOUND(退出码 4) | --user 指定的用户在系统中不存在。 | 检查用户名,或使用默认的受管用户(ubuntu)。 |
| 我已无法用密码登录 | 由于加固,password_authentication 处于 "no"。 | 这是有意为之:用公钥登录,并用 imaxe ssh keys 管理密钥。 |
SSH 模块遇到问题了?
把「imaxe <module> status --json」的输出发给我们,我们会尽快回复你。