无需在编程代理环境中放置密钥,为其提供SSH访问真实服务器的权限 - 信任模型解析

Reddit r/AI_Agents 产品

摘要

作者提出了一种安全方法,通过一个持有密钥并签名命令的中介客户端,为编程代理提供SSH访问真实服务器的权限,并支持按主机策略、实时监控和审计日志,同时讨论局限性并寻求反馈。

我已开发此项目数月,希望与实际运行代理的人核实设计。问题:当代理的任务离开仓库(如重启服务、运行迁移、检查实际服务器上nginx为何宕机)时,它需要SSH。默认方式是将其密钥粘贴到环境中或让它使用您未锁定的ssh-agent——这是一种无法收回的持票凭证。代理可能泄露密钥,提示注入可能窃取它,撤销意味着要轮换每台主机上的密钥。我的设置:代理从未看到密钥。它通过MCP与SSH客户端通信;客户端持有密钥并代表代理签名。在此基础上:- 按主机策略:完全访问 / 命令白名单 / 阻止。受感染代理的影响范围按主机限制,而非全局。- 实时监控网格:每个代理会话都镜像到一个只读视图,我可以随时查看。代理不知道正在被观察——无观察者效应,它不会为镜头表演。- 审计日志:每个命令都记录主机、时间、设备和IP。会话记录仅输出(无按键),因此输入的密码不会进入记录。目前遇到的真实局限:基于shell字符串的命令白名单是刹车,而非边界(允许的命令如果接受路径参数仍可能被滥用)。密钥托管阻止了凭证窃取,但无法阻止通过允许输出的数据泄露——cat .env仍然是cat .env。而且“撤销”可以停止新工作,但无法在没有服务器端配合的情况下可靠地终止已运行的远程进程。好奇其他人如何处理这个问题。你们会直接给代理SSH权限吗?按任务范围化的部署密钥?某种代理?以及,什么条件会让你们信任一个代理在生产服务器上运行?(这是我正在构建的产品——Termalin——如果有人询问,我很乐意在评论中分享详情;有意不在帖子中包含链接。)
查看原文

相似文章

@paulmillr: https://x.com/paulmillr/status/2075335421920239651

X AI KOLs Following

这篇推文描述了一种安全且可靠的代理AI开发环境设置,使用通过SSH访问的专用服务器,配合tmux实现会话持久化,带有原生tmux集成的终端模拟器,以及用于安全访问的VPN。作者主张采用这种方式而非本地代理执行,原因是安全和可靠性方面的考虑。