启动器 产品 Bitnami 文档imaxe CLI 博客 联系
imaxe ssh 访问 v1.0.0

掌控 SSH 访问

无需手动编辑文件即可管理服务器的远程访问:授权密钥host key、活动会话以及 sshd 加固,全部在重载前先校验配置。

$ imaxe ssh status
版本
v1.0.0
子命令
10
配置
/etc/imaxe/ssh.yml
需要 root
受管用户
ubuntu

该模块的功能 #

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 --json
你会看到 sshd 是否激活、监听在哪个端口,以及已应用加固的摘要。
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 --yes
服务器有了自己独有的身份。注意:指纹会改变,因此每个客户端首次重连都会要求重新确认接受。
4

检查并重新应用加固

确认 sshd 仍按应有的方式配置,若不然则纠正它。

将当前加固与期望的(即你配置所定义的)进行比对:

终端
$ sudo imaxe ssh harden show

有差异?从 YAML 重新应用加固,并安全地重载 sshd

终端
$ sudo imaxe ssh harden reapply
配置恢复到期望状态(禁止 root 通过 SSH、禁用密码、仅公钥),并且 sshd 在不中断你会话的情况下重载。
5

查看会话并重启 sshd

看看谁已连接,并放心地应用更改而不必担心被锁在外面。

列出此刻活动的 SSH 会话:

终端
$ sudo imaxe ssh sessions

要应用配置更改,优先使用 reload(不会中断连接);仅在需要完整重启时才用 restart。两者都会先校验配置:

终端
$ sudo imaxe ssh reload
$ sudo imaxe ssh restart
如果配置无效,操作会在应用之前停止——你的访问权保持不变。
小心被锁在外面

在重启 sshd 或更改端口之前,保留一个打开的第二应急会话。如果在 hostkeys regenerate 之后重连时出现 host key 不同的提示,这是预期的:接受新身份即可。

CLI 参考命令、标志与文件

用法概要 #

用法
imaxe ssh <subcomando> [<subcomando-anidado>] [argumentos] [flags]

读取或修改 sshd、授权密钥或 host key 的操作需要 root 权限(使用 sudo)。keyshostkeysharden 组各自归集其嵌套子命令。给 statussessionskeys listharden show 添加 --json,可获得适合脚本的输出。

子命令 #

子命令功能相关标志
statussshd 状态:是否激活、端口以及加固摘要。--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> 必填stringkeys add 中:公钥,或用 -stdin 读取。
<selector> 必填stringkeys remove 中:要移除密钥的指纹(SHA256:...)或注释。
--userstringubuntu要查询或修改其 authorized_keys 的用户(在 keys list/add/remove 中)。
--commentstringkeys add 中:关联到密钥的注释,便于之后识别。
--yesboolfalsehostkeys regenerate 中:不询问直接确认(会改变客户端可见的指纹)。
--jsonboolfalsestatussessionskeys listharden 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 示例:

/etc/imaxe/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 $? 查看——便于在脚本中串联:

0OK操作成功完成。
1ERR未分类的通用错误。请查看日志。
2USAGE参数无效或缺失。
3CONFIGsshd -t 校验失败;未应用任何更改。
4NOTFOUND未找到密钥或用户。
5RELOAD更改已应用但 sshd 重载失败。

在调试时实时跟踪服务日志:

终端
$ 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」的输出发给我们,我们会尽快回复你。

联系支持