通过Faro的Agent Bridge(MCP端点)实现AI编程工具对两台新服务器的自主安装和配置,全程2分钟,无需硬编码密钥。
我之前找到的每个让 AI agent 在服务器上工作的设置都要求两件事之一。要么我把私钥粘贴在 agent 能读到的地方,要么我在机器上安装一个守护进程并让它持续运行。我不愿意做第一件事,也不想维护第二件事,所以大约一年来我就没有在运维工作中使用 agent。我会在窗口中打开一个,向它描述一个问题,然后自己输入命令。
最让我不满的地方是:我已经有一个认证的 SSH 会话打开了。它就在我每天使用的文件管理器里,连接着,主机密钥已验证,随时准备。agent 不需要凭证。它需要那个会话,在使用之前应该得问我。
这就是 Faro 中的 Agent Bridge,我维护的 SFTP/SSH 客户端。我一直用它做只读操作,主要是跟踪日志和比较测试环境与生产环境之间的配置。上周我把它指向了一个影响更大的东西:两个全新的 DigitalOcean droplet,一个 prompt,在两台机器上安装一个完整的服务器控制面板。
两分钟,无需额外说明。Faro 和 ServerKit 都采用 MIT 许可证,如果你想跟着操作的话。
Bridge 是一个会说 MCP 的 HTTP 端点。它绑定到 127.0.0.1 上的随机端口,需要每次启动时生成的新 bearer token,并且只向机器上已有的东西提供服务。连接 agent 只需要一个命令:
claude mcp add --transport http faro http://127.0.0.1:<port>/mcp \
--header "Authorization: Bearer <token>"
从那里 agent 获得 25 个工具。faro_exec 是人们会反应的那个,但大多数有用的工作来自 faro_list_dir、faro_read_file、faro_search、faro_tail、faro_diff — 检查,而不是更改。能够说"读取两个机器上的 nginx 配置并告诉我有什么不同"这在日常工作中比远程执行有价值得多。
有三个东西位于工具调用和我的服务器之间。会话是逐个选择加入的,所以我没有授予访问权限的已保存连接不在 agent 收到的列表中;它无法对看不到的机器采取行动。任何有副作用的操作都会在 Faro 窗口中弹出一个提示,显示确切的命令,调用会阻塞直到我回答或在两分钟后超时。并且每个调用,无论批准还是拒绝,都会进入一个运行活动日志。
所有这些都不涉及 agent 持有秘密。它与 localhost 通信。Faro 持有 SSH 会话,在远程端没有安装任何东西,这是我最关心的在整个机群中的部分。
这是我输入的全部内容:
Install ServerKit on serverkit-test-server-1 and serverkit-test-server-2
in parallel using faro-cli: curl -fsSL https://serverkit.ai/install.sh | bash
Return me the 2 admin URLs.
没有 IP,没有用户名,没有密钥路径。两个名称,是我几个月前在 Faro 中保存的那两个。
这之所以可行,是因为 faro-cli,一个与 GUI 运行的 Bridge 会话的独立二进制文件。它从 Faro 的本地发现文件中读取 URL 和 token,所以脚本永远不会处理其中任何一个:
faro-cli agent sessions
# → serverkit-test-server-1 sftp 159.223.187.83
# → serverkit-test-server-2 sftp 157.230.230.92
faro-cli agent exec serverkit-test-server-1 'hostname'
以这种方式到达的命令仍然会通过批准门,仍然会出现在控制台中。CLI 是进入同一个房间的不同入口,而不是绕过锁的方式。
一个服务器会是一个更容易的演示,但不那么诚实。所有关于机群工作的有趣的东西都从两台开始:第二个机器是漂移开始的地方,是你粘贴错误 IP 的地方,是你做了六步正确然后忘记第七步的地方。
所以我故意以不同的方式设置它们。serverkit-test-server-1 使用 SSH 密钥。serverkit-test-server-2 使用 DigitalOcean 发给你的 root 密码。两者最后都成为同一个连接列表中的普通条目,到了 agent 看到它们的时候,差异已经停止重要。它得到两个名称并以相同的方式对待它们。
它列出了机群,针对两个配置文件开火,两个安装流并行运行。每个大约一分钟。然后它交回两个 URL,我打开了两个,在开始录制时还是空的硬件上有两个工作面板。
批准疲劳是真正的问题,我认为我还没有解决它。看着安装程序意味着一遍遍点击批准,一遍遍点击批准是在训练自己停止阅读。有放宽的策略 — 允许全部、自动批准只读操作、自动批准匹配为安全和只读的命令 — 按配置文件存储,所以它们在重新启动后存活。每一个都是一个安全决策,我宁愿人们在一开始就故意做出它,而不是在第四十个提示周围漂流进去。
更不舒服的限制是:批准涵盖命令,而不是命令做的事。我批准了 curl … | bash。之后那个脚本做的任何事都是我和我对那个 URL 的信任之间的事。Bridge 移除了凭证暴露和远程守护进程。它没有移除判断力,我对声称在这个类别的工具中解决了这个问题的任何人都会持怀疑态度。
除此之外:它在设计上仅限本地主机,这适合一个坐在办公桌前的操作员,对 CI 没有任何作用。桌面构建是未签名的,因为我还没有 Apple 或 Windows 证书,所以每个操作系统都会在你第一次启动时反对。而且视频中的两个 droplet 都是一次性的,之后被销毁了。
Faro 是 SFTP、FTP、SSH、S3 兼容存储、WebDAV 和几个云的桌面客户端,用 Rust 在 Tauri 2 上编写:github.com/jhd3197/faro。ServerKit 是它安装的面板,自托管,一条命令:
curl -fsSL https://serverkit.ai/install.sh | bash
都是 MIT,都是免费的,都不会回电话。
我一直在改变想法的开放问题是自动批准应该在哪里停止。只读检查显然没问题。apt install 感觉没问题直到某天它不是。如果你已经给了 agent 这种访问权限,我很想知道你在哪里划的线,因为我即将发布默认值,我宁愿不单独发明它们。