如何在 VPS 上安全自托管 Agent Zero
Agent Zero 的 Web UI 可执行代码、驱动浏览器并运行 shell。了解 50001 端口的暴露风险,用回环地址绑定并通过 SSH 隧道安全访问。
Agent Zero 是什么,以及风险所在
Agent Zero 是一个开源、以 Docker 为优先的代理框架。主代理可以生成从属代理,将任务拆分为多个专门部分;这些代理可以执行代码、驱动浏览器和运行 shell 命令,且全部在 Agent Zero Docker 容器内完成。您可以通过 Web UI 控制整个系统。它功能强大,使用体验也很直观,即使只有一台价格为 six-dollar 的 VPS 也能运行。如果您需要的是多代理协作模式,而不是这个框架,那么同一台主机上的两个 Claude Code 会话可以直接互相发送消息;这需要运行和保护的组件要少得多。
风险在于 Web UI。它是一个可以运行命令和写入文件的系统的控制面板,因此,暴露在公网且未进行身份验证的 Web UI,实际上提供了进入该系统的远程入口。这里还有一个多数安装指南都会直接引导您踩中的陷阱:docker run 示例发布了该接口,却没有指定地址。截至 2026-10-12,README 中的直接命令将主机端口 80 映射到(-p 80:80),A0 Install 启动器使用端口 5080,VPS 部署指南建议使用端口 50080,而面向 v0.9.x 及更早版本的指南使用端口 50001。无论选择哪个端口,不指定地址的映射都会在所有网络接口上监听;在公网 VPS 上,这意味着容器启动后,该端口立即可以从整个互联网访问。您应首先修复这一点,而不是把它留到最后。
所需条件
您需要一台已安装 Docker 的 VPS、一个语言模型 API 密钥,或一个可供 Agent Zero 连接的本地模型,并准备至少几 GB RAM。Agent Zero 可以运行在任何支持 Docker 的环境中,从小型 VPS 到 GPU 服务器均可。如果您不熟悉 Docker,请参阅Docker 基础指南,其中介绍了以下命令所需的基础知识。
使用 Docker 安装,并绑定到回环地址
文档中的快速入门只需执行一个 docker run。与其他地方常见的复制粘贴版本相比,重要区别在于发布的地址。不要像 -p 80:80 那样发布到所有网络接口。应发布到回环地址:
docker run -d --name agent-zero \
-p 127.0.0.1:5080:80 \
-v a0_usr:/a0/usr \
agent0ai/agent-zero-p 127.0.0.1:5080:80仅将 Web UI 绑定到服务器的回环地址,因此无法从互联网访问。您可以通过 SSH 隧道在自己的计算机上访问它:
ssh -L 5080:127.0.0.1:5080 you@your-vps然后在本机打开 http://127.0.0.1:5080,在 UI 中配置模型提供商,并在 Settings、Authentication 下设置 UI 登录名和密码。官方文档要求在允许其他人访问实例前完成此设置。对于永久的多用户部署,应将其置于 VPN 或需要身份验证的反向代理之后,但绝不要将原始 UI 发布到开放互联网。对于服务器上其他界面可控制敏感功能的工具,也应遵循这一做法。例如,应通过通往其 UI 的隧道访问自托管的开放式 kritt 扫描器,而不是发布端口。
其他指南止步之处,以及您不应止步于此
搜索 Agent Zero 的安装方法时,您会找到大量指南,包括托管服务商提供的指南。这些指南通常会让您在已发布的端口上运行 Web UI(旧版通常使用 50001,新版通常使用 80、5080 或 50080),然后就此结束。风险恰恰从这里开始,而不是在这里结束。完成安全配置还需要两点。第一,像上文所述,保持 UI 私有。第二,在服务器前配置默认拒绝的防火墙,避免您遗忘的服务响应来自互联网的请求:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enable但请注意其限制:Docker 会在 UFW 规则生效前,为已发布的容器端口转发流量。因此,防火墙无法覆盖发布到所有网络接口的容器端口。这就是上文绑定到 loopback 的配置很重要的原因;Docker 端口如何绕过 UFW 详细解释了其中的原理。完整了解相关配置,请参阅防火墙基础知识,并注意 IPv6 缺口:即使 IPv4 规则看起来限制严格,:: 上的服务仍可通过 IPv6 访问。
容器隔离保护的是智能体,而不是您的服务器
Agent Zero 的设计在一种隔离方面确实做得很好:框架及其启动的每个智能体都运行在自己的 Docker 容器中,而不是直接运行在宿主机上。因此,它们编写和运行的代码会写入容器,而不是您的主目录。这种隔离很有价值。下级智能体与主智能体共享同一个容器,因此隔离边界位于智能体与宿主机之间,而不是智能体彼此之间。您很容易把这些信息理解为“它运行在沙箱中,所以我很安全”,然后就此止步。容器隔离可以让智能体的工作脱离宿主机,但无法保护您的服务器免受互联网攻击,也无法阻止暴露的 Web UI 将控制权交给陌生人。这些防护措施需要由您在宿主机上负责。应提前决定:在无人监控时,智能体最多可以执行哪些操作。这与 Claude Code 的权限模式 背后的判断相同:无人值守的服务器应采用比放在您面前的笔记本电脑更严格的设置。
密钥、用户与主机
将模型 API 密钥和其他凭据保存在 Agent Zero 的配置文件或环境文件中,并确保只有正确的账户可以读取。不要将其留在 shell 历史记录中,也不要提交到任何代码仓库。对于主机上其他用于保护密钥的组件,也应采用相同的思路。例如,加固 Vaultwarden的重点在于保护其管理员令牌和备份文件,而不是重复处理应用已经完善实现的加密功能。按照最小权限用户的做法,以非特权用户而不是 root 管理主机,并参考SSH 加固,将 SSH 改为仅使用密钥认证。然后按照下面的检查清单逐项检查,避免遗漏。
如果您正在比较不同的代理,这也是OpenClaw 加固指南和OpenHands 指南采用的安全策略:保持控制面为私有状态,以非特权用户运行,默认启用防火墙,并将主机视为会运行未由您编写的代码的系统。要并排比较这 5 个代理,请参阅2026 年最佳自托管 AI 代理。
这些方案的底层概念都在在 VPS 上构建自己的 AI 代理中介绍;Dify也是一个值得比较的可自托管平台。
FAQ
Agent Zero 适合自行托管吗?
可以,前提是将其 Web UI 保持私有,并加固主机。Agent Zero 会运行代码、浏览器和 shell,并通过您发布的主机端口上的 Web UI 进行控制。因此,风险来自接口暴露,而不是框架本身。将 UI 绑定到 loopback,通过 SSH 或 VPN 访问;设置 UI 登录名和密码;配置默认拒绝的防火墙规则;并使用非特权用户运行。
Agent Zero 默认会将 Web UI 暴露到互联网吗?
文档中的 docker run 命令会在未指定地址的情况下发布接口(README 使用 -p 80:80)。这种映射会监听所有网络接口。在公共 VPS 上,这意味着容器启动后即可从互联网访问。UFW 无法阻止这一点,因为 Docker 会绕过 UFW 转发已发布的端口。在发布地址中加入 127.0.0.1,使 UI 仅监听 loopback,然后通过 SSH 隧道或 VPN 访问。
Agent Zero 能在小型 VPS 上运行吗?
可以。Agent Zero 可在任何能运行 Docker 的环境中运行,包括小型、低成本的 VPS。不过,更繁重的任务和更大的本地模型需要更多内存。如果使用自行托管的模型,而不是托管 API,应根据模型而非仅根据 Agent Zero 为服务器配置资源。
Agent Zero 与 OpenClaw 或 Hermes 有何不同?
它们的功能有所重叠,但定位不同。Agent Zero 是一个以 Docker 为首要运行环境的框架,围绕主代理构建;主代理会在其容器内生成从属代理,并通过 Web UI 驱动。OpenClaw 和 Hermes 是通过聊天应用访问的个人助理。三者的安全原则相同:保持控制界面私有,并加固主机。