安全模型
bssh AI 的出发点是一个假设:智能体可能被它读到的任何内容操纵。 一行日志、一个文件、一段登录横幅或一个网页都可能夹带指令,而没有哪个模型能可靠地无视它们。bssh 不试图让模型变得听话,而是限制任何智能体(无论是否被操纵)在你的服务器上能做的事,并记录一切。
始终成立的规则
Section titled “始终成立的规则”- 智能体不持有任何凭据。 密钥、密码和证书都留在 bssh 中。智能体只发送工具调用并接收结果。
- 判定是确定性的。 由 shell 解析器和你的策略决定允许、询问或拒绝,不咨询任何模型:措辞再有说服力的请求,得到的答案也和普通请求一样。
- 范围外的主机不存在。 智能体无法列出它们,指名调用会像拼写错误一样失败。
- 变更需要等人确认, 审批人看到的是确切的命令或 diff。智能体给出的说明会标明出自智能体。
- 一切都有记录。 每次调用、判定、审批和输出摘要都写入签名的哈希链日志,可以离线验证。
每项限制在哪里生效
Section titled “每项限制在哪里生效”| 限制 | 由谁执行 | 即使你电脑上的 bssh 被绕过也成立 |
|---|---|---|
| 范围、策略、审批、预算 | bssh,在承载智能体连接的机器上 | 否 |
| 读取既不能写入也不能联网 | 内核,在主机上(Landlock 或 bubblewrap) | 是,在配有沙箱的主机上 |
| 已批准的命令只能执行它自己 | sshd,在主机上,通过证书的强制命令 | 是,在信任你证书颁发机构的主机上(文件修改使用你的连接凭据) |
| 智能体的写入没有 root 权限 | bssh-agent 用户和你的 sudo 规则 |
是,在有智能体用户的主机上 |
bssh ai doctor 会显示每台主机适用哪些行。一行都不适用的主机仅受 bssh 保护,但这也远胜于让智能体直接持有你的密钥。
对于试图操纵智能体的文本,bssh 的做法是:
- 服务器的输出放在标记为不可信数据的字段中返回,绝不与 bssh 给智能体的指令混在一起。
- 读取操作在沙箱中运行,因此被注入的“读取”命令既无法改变任何东西,也无法把数据发送出去。
- 下载并执行代码的命令(例如
curl … | sh)会被标记为未知,并且总是需要询问。 - 连续多次被拒绝,或反复尝试范围外的主机,会结束本次运行。
在输出到达智能体之前,bssh 会移除看起来像机密的内容:私钥块、云服务和各类服务的令牌、JWT、bearer 请求头、key=value 行和 URL 中的密码。每一项都会被替换为类似 «redacted:aws-key» 的标记,并计入日志。deny_paths 中的路径(私钥、.env 文件、/etc/shadow 等)完全不能读取。
这样,机密不会进入智能体的上下文,也不会进入模型提供商的日志。检测基于模式:它能覆盖常见格式,但不是你的系统可能打印出的每一种机密。
使用 bssh Teams 时
Section titled “使用 bssh Teams 时”同步服务器负责转发审批请求并保存 AI 审计事件,二者都经过端到端加密。它能看到哪个智能体在何时行动、由谁批准,但永远看不到命令、主机、输出或策略。策略由管理员签名,网关会拒绝未签名的策略,或比已见版本更旧的策略。
需要了解的局限
Section titled “需要了解的局限”- 在客户端中确认依赖于智能体的客户端。 被设置为自动批准一切的客户端也会批准这类请求。因此该级别是可选的,只用于你所选主机上的低风险变更,并会如实记录。
- 客户端名称由客户端自报。 日志显示的是 MCP 客户端声称自己是哪个智能体,并标注为自报。
- 没有沙箱时,“只读”取决于解析器的判断。 它很保守,但也只能做到其规则所及的程度。安装 bubblewrap 或较新的 util-linux,可以让读取在机制上就是安全的。
- bssh 无法阻止智能体另辟蹊径。 拥有自己的 shell 和你的 SSH 密钥的智能体仍然可以直接运行
ssh。不要把密钥交给智能体,并在适用时安装 Claude Code 防护钩子。 - 仍然需要有人认真阅读请求。 计划、diff 和临时授权能让请求少而清晰,但不看就批准的审批起不到任何保护作用。