无需在编程代理环境中放置密钥,为其提供SSH访问真实服务器的权限 - 信任模型解析
摘要
作者提出了一种安全方法,通过一个持有密钥并签名命令的中介客户端,为编程代理提供SSH访问真实服务器的权限,并支持按主机策略、实时监控和审计日志,同时讨论局限性并寻求反馈。
我已开发此项目数月,希望与实际运行代理的人核实设计。问题:当代理的任务离开仓库(如重启服务、运行迁移、检查实际服务器上nginx为何宕机)时,它需要SSH。默认方式是将其密钥粘贴到环境中或让它使用您未锁定的ssh-agent——这是一种无法收回的持票凭证。代理可能泄露密钥,提示注入可能窃取它,撤销意味着要轮换每台主机上的密钥。我的设置:代理从未看到密钥。它通过MCP与SSH客户端通信;客户端持有密钥并代表代理签名。在此基础上:- 按主机策略:完全访问 / 命令白名单 / 阻止。受感染代理的影响范围按主机限制,而非全局。- 实时监控网格:每个代理会话都镜像到一个只读视图,我可以随时查看。代理不知道正在被观察——无观察者效应,它不会为镜头表演。- 审计日志:每个命令都记录主机、时间、设备和IP。会话记录仅输出(无按键),因此输入的密码不会进入记录。目前遇到的真实局限:基于shell字符串的命令白名单是刹车,而非边界(允许的命令如果接受路径参数仍可能被滥用)。密钥托管阻止了凭证窃取,但无法阻止通过允许输出的数据泄露——cat .env仍然是cat .env。而且“撤销”可以停止新工作,但无法在没有服务器端配合的情况下可靠地终止已运行的远程进程。好奇其他人如何处理这个问题。你们会直接给代理SSH权限吗?按任务范围化的部署密钥?某种代理?以及,什么条件会让你们信任一个代理在生产服务器上运行?(这是我正在构建的产品——Termalin——如果有人询问,我很乐意在评论中分享详情;有意不在帖子中包含链接。)
相似文章
赋予编程代理 shell 访问权限感觉太疯狂了。大家是如何处理机密的?
作者对授予编程代理 shell 访问权限表示担忧,指出它们可以读取 .env、凭据等敏感文件,并希望在让代理接触真实仓库之前,向社区请教实用的机密处理模式。
@paulmillr: https://x.com/paulmillr/status/2075335421920239651
这篇推文描述了一种安全且可靠的代理AI开发环境设置,使用通过SSH访问的专用服务器,配合tmux实现会话持久化,带有原生tmux集成的终端模拟器,以及用于安全访问的VPN。作者主张采用这种方式而非本地代理执行,原因是安全和可靠性方面的考虑。
你是如何让编码代理访问外部 API,同时不把原始密钥交给它们?
这是一场关于开发者如何为编码代理处理凭据的讨论,探讨了一种让代理无需接收原始密钥即可使用 API 的方案:在请求时注入凭据,并限制允许的目标地址。作者正将这一方案构建为 Stashbase 的一部分,并邀请大家分享各自的实践。
给AI agent生产环境的密钥,这能行吗?
一种面向AI agent访问生产云基础设施的安全设计方案,采用拆分凭证和审批门控机制,防止在未经人工批准的情况下执行破坏性操作。
编码智能体已经很强了,但管理它们还没跟上。我开源了为此构建的控制室(MIT)
作者开源了 o8,这是一个采用 MIT 许可的编排器,用于在隔离的 git worktree 中管理多个编码智能体,具备合并门禁、审计追踪和移动审批功能。