主机准备
bssh AI 可以用于你已经能访问的任何主机:策略、审批和日志都不依赖服务器。主机上的三项配置能让这些限制在你电脑上的 bssh 被绕过时依然成立。它们都不是必需的,bssh ai doctor 会告诉你每台主机具备哪些。
| 在主机上 | 带来的好处 |
|---|---|
| 只读沙箱(Landlock 或 bubblewrap) | 读取操作既不能写入也不能建立网络连接,因此无需询问即可运行 |
bssh-agent 用户 |
供智能体写入使用的独立低权限账户,没有密码,也没有 sudo |
| 信任你的本地证书颁发机构 | 已批准的命令以有效期两分钟、只允许该命令的证书执行 |
智能体第一次使用某台主机时,bssh 会寻找可用的沙箱,并选择最好的一种:
- Landlock,通过 util-linux 2.40 或更高版本的
setpriv:任何地方都不能写入,读取限制在策略的read_paths内,并且在 Landlock 支持的内核上禁止 TCP 连接。 - bubblewrap(
bwrap):整个文件系统以只读方式挂载,使用私有的/tmp,没有网络。
在有沙箱的主机上,run_readonly 和 run_many 会在沙箱中执行智能体发送的任何命令,策略无需询问即予允许。实际会写入的命令只会失败。在没有沙箱的主机上,bssh 只允许解析器判定为只读的命令,其余都会询问。
安装 bwrap(apt install bubblewrap、dnf install bubblewrap)通常是让主机获得沙箱的最快方式。
bssh ai setup web-1 # 一台主机bssh ai setup -t staging # 带某个标签的所有主机bssh ai setup 需要通过 sudo 获取一次 root 权限,并在执行任何操作之前显示完整脚本:
$ bssh ai setup web-1 --dry-runbssh ai setup will run this script as root on 1 host(s): web-1 ...It creates the user `bssh-agent` (no password, no sudo) and its home with a backup directory.It does not change firewalls or sudoers.
Dry run: nothing was changed.如果存在 systemd-journal 和 adm 组,该用户会加入这两个组,以便读取日志。bssh 不会安装 sudo 规则或防火墙规则:这些由你决定。bssh ai doctor 会给出策略所需的最小 sudo 规则,例如:
bssh-agent ALL=(root) NOPASSWD: /usr/bin/systemctl reload nginx并提醒你在防火墙上限制智能体用户的出站流量(如果可以的话)。
绑定审批的证书
Section titled “绑定审批的证书”有了本地证书颁发机构,已批准的命令就不再使用长期有效的密钥。对于来自 run、service 或变更计划的每条命令,bssh 都会签发一张新证书,只对这条命令有效:
- 主体为
bssh-agent,只能以智能体用户身份登录; - 以该步骤的命令作为强制命令,证书无法执行任何其他内容;
- 不分配终端,不允许端口转发和代理转发;
- 有效期两分钟。
文件修改在审批之后、原文件备份完成之后,通过 SFTP 使用你的连接凭据写入。
-
在你的电脑上创建证书颁发机构:
bssh ai ca init密钥保存在你的电脑上,权限为 0600。如需用口令保护,请在运行
ca init时设置BSSH_AI_CA_PASSPHRASE。 -
让主机信任它:
bssh ai ca trust web-1bssh ai ca trust -t staging这会把该颁发机构加入
TrustedUserCAKeys(与主机已信任的颁发机构并存),把bssh-agent主体只映射到bssh-agent用户,并在重新加载sshd之前用sshd -t检查新配置。如果检查失败,会恢复原来的配置。和setup一样,它会先显示脚本,--dry-run到此为止。
bssh ai doctor web-1bssh ai doctor -t staging对每台主机:是否可达、bssh-agent 是否存在、使用哪种沙箱、是否信任你的证书颁发机构,以及你的策略所需的 sudo 规则。它还会列出 bssh 在你电脑上找到的智能体客户端,以及它们是否已通过 bssh ai install 配置。