Hermes Agent 托管:5美元 VPS 足够吗
Hermes Agent 无需 GPU,模型在其他位置运行,5美元 VPS 即可托管。本文介绍专用用户、systemd ProtectSystem=strict 加固,并覆盖 UFW 的 IPv6 防火墙规则。
Hermes Agent 是什么
Hermes Agent 是 Nous Research 于 2026 年 2 月发布的自托管 AI 代理。您可以在自己的服务器上运行它。它会持久保存项目记忆,在工作过程中编写可复用的技能,并通过 Telegram、Discord 等聊天应用联系您。它与模型无关,因此您可以为它指定偏好的语言模型。它足够轻量,可以运行在 $5 VPS、Docker 或 SSH 环境中。模型在其他位置运行,而循环、工具和记忆在您的服务器上运行。这种分工使 Hermes 成为代理框架,而不是模型,也正因如此,小型服务器就已足够。
与任何代理一样,它的价值来自代表您执行操作,这也是您需要谨慎配置它的原因。能够记忆、学习和运行任务的代理,会作为常驻进程运行,并实际访问您的服务器。本指南将以安全方式安装它。这里的加固措施与 安全运行 OpenClaw 时采用的措施相同。
一条命令完成安装,以及为什么应先阅读脚本
Hermes 可通过一条命令安装:
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash这很方便,也是一种值得遵循的操作模式。直接将互联网中的脚本通过管道传给 shell,会以执行该命令的用户身份运行脚本中的所有内容。在真实服务器上执行前,应先下载并阅读脚本,然后使用专用用户而不是 root 运行:
curl -fsSL https://hermes-agent.nousresearch.com/install.sh -o hermes-install.sh
less hermes-install.sh这并不是针对 Hermes 的特别不信任。养成这一习惯,可以避免任何 curl | bash 安装过程悄然成为整个部署中最薄弱的环节。
为其配置非特权用户
让 Hermes 使用独立的系统账户运行,绝不要使用 root。这样,即使存在漏洞或收到恶意指令,也无法影响机器的其他部分。创建一个不带登录 shell 的用户:
sudo useradd --system --home /opt/hermes --shell /usr/sbin/nologin hermes在 /opt/hermes 下安装 Hermes,并将该账号设为所有者。官方安装程序会为运行它的用户安装,因此请以 hermes 用户运行已下载的脚本,例如 sudo -u hermes bash hermes-install.sh。这样文件会写入该用户的主目录,而不是您的主目录。原因与以非特权用户运行服务相同:代理进程所使用的账号决定了它最多能够造成多大范围的损害。操作系统账号只是其中一部分,因为代理自身的设置还决定了它在未经确认的情况下可以执行多少操作。当代理运行在您不在现场操作的服务器上时,这正是Claude Code 的权限模式所要解决的问题。如果这台服务器最终需要服务的不只是您一个人,OneCLI 将每个代理使用一个账号的理念扩展到整个团队:每个人都有自己的沙箱代理,而模型密钥集中保存在单一网关中,无需到处复制。
设置防火墙并隔离机密
Hermes 通过连接模型和您接入的聊天应用来执行任务,因此不需要接受来自互联网的入站连接。在服务器前设置默认拒绝的防火墙:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw enable请注意这里的 IPv6 防火墙缺口:只覆盖 IPv4 的规则集可能会让服务通过 IPv6 暴露。若代理确实需要访问仅存在于您家庭网络中的资源,例如 NAS 或本地数据库,可通过 使用子网路由器将该网络发布到您的 tailnet,经出站连接访问这些资源,而不是开放入站端口。将模型 API 密钥和聊天令牌保存在只有 hermes 用户可读取的文件中(权限为 600),并将其加载到服务中。不要把它们直接粘贴到命令行,否则会写入 shell 历史记录。此类机密文件与自托管密码管理器中的管理员令牌一样,都是规模虽小但价值很高的目标。Vaultwarden 加固中的原则同样适用:保护好这个可以解锁其他所有内容的文件,并同样严格地保护其备份。文件权限可以阻止主机上的其他用户访问,但无法阻止底层服务提供商访问。因此,如果代理持有的密钥敏感到足以改变这一判断,加密内存和证明将决定您的托管公司是否能够从 RAM 中读取这些密钥。
将 Hermes 作为加固的 systemd 服务运行
systemd 单元可让 Hermes 在您注销和重启后继续运行,在进程崩溃时自动重启,并支持添加内核级沙箱,限制它可以访问的资源。启用 NoNewPrivileges、ProtectSystem=strict、PrivateTmp 和 ProtectHome,使入侵影响保持在受限范围内。
在此生成加固后的单元,然后将其复制到 /etc/systemd/system/hermes.service。该单元会启动 hermes gateway,即连接聊天应用的长时间运行进程;安装后运行 hermes --help,确认您所用版本中的命令及二进制文件路径,然后再启用服务:
相关指令以及 daemon-reload 和 enable --now 步骤,详见将程序作为 systemd 服务运行:
sudo systemctl daemon-reload
sudo systemctl enable --now hermes如需查看在另一个代理上使用相同模式的完整示例,请参阅在 systemd 下无头运行 dsh。该示例会更详细地介绍 Restart 规则,以及服务在夜间停止后首次排查时需要使用的 journalctl 命令。更好的做法是不要等到早晨才发现问题:一个 OnFailure= 单元可将告警推送到您自己的 ntfy 服务器,这样 Hermes 放弃重启后,您的手机会立即收到通知。
如果您希望让 systemd 监管容器,而不是原生安装,请参阅让 KiroCrew 作为固定版本容器持续运行。该方法同样可在重启后恢复运行,同时固定镜像版本。
围绕它加固服务器
最后加固服务器的入口。将 SSH 改为仅使用密钥进行身份验证,并禁用 root 登录,参考VPS 上的 SSH 加固,这样用于管理服务器的账户就无法通过猜测登录。会持续保存状态的代理值得受到保护,而最基本的保护措施是确保任何人都无法登录它所在的服务器。
服务器本身锁定后,大多数人接下来会添加 Web 搜索功能。通过让代理连接到您自己的 SearXNG 实例,这些查询会保留在您自己的服务器上,但代价是代理可能读取未经任何人审核的页面。Hermes 通常也不是服务器上唯一的代理。如果您还在服务器上运行 Claude Code,两个会话可以直接互相交接任务,无需每次都通过您转交。如果您添加的下一个代理会读取代码而不是聊天应用,在同一台服务器上运行 open-kritt 的安全扫描也采用相同方式:固定版本、使用独立账户,并通过 SSH 隧道访问 Web UI,而不是开放端口。
如果您希望了解底层机制,而不是直接运行打包好的代理,在 VPS 上构建自己的 AI 代理会逐步说明整个过程。如果该指南中的术语对您来说仍然陌生,循序渐进地学习 AI 代理会按照循环、工具、记忆和安全机制之间的构建顺序展开,让 Hermes 为您做出的选择不再显得神秘。
FAQ
我可以在廉价 VPS 上运行 Hermes Agent 吗?
可以。Hermes 设计为在小型服务器上运行,$5 的 VPS 足以支持个人使用的常驻代理。它主要连接语言模型和聊天应用,而不是承载大量网络流量,因此资源占用较低。为它创建专用用户,配置防火墙和 systemd 服务后,小型 VPS 可以稳定运行。如果您已经有一台家用设备,应先将其硬件和电力成本与每月 VPS 费用进行比较,因为家用 Proxmox 主机和租用 VPS各有优势。
运行单行安装脚本安全吗?
curl | bash 安装方式很方便,但更安全的做法是先下载并阅读脚本,再运行它;同时应使用专用用户,而不是 root。这样,无论安装脚本来自哪个项目,即使通过管道执行,也只能执行该受限账户拥有权限的操作。这并非 Hermes 特有的问题,而是所有此类安装方式都应遵循的良好实践。
如何在不使用 root 的情况下运行 Hermes?
创建一个没有登录 shell 的专用系统用户,将 Hermes 安装到该用户拥有的目录(例如 /opt/hermes)下,并以该账户运行服务。如果代理遭到入侵,影响范围将限制在该账户能够访问的资源内。
如何让 Hermes 在退出登录后继续运行?
将其作为 systemd 服务运行。单元文件可以在系统启动时启动 Hermes,在进程崩溃时重新启动它,并在 SSH 会话结束后保持其运行;同时,systemd 的沙箱选项可以限制进程能够访问的资源。使用上文的工具生成加固后的单元文件,然后通过 systemctl enable --now hermes 启用它。
Hermes Agent 需要 GPU 吗?
不需要。Hermes 是代理运行时,而不是语言模型,因此可以在仅配备 CPU 的小型 VPS 上正常运行。繁重的计算会在模型运行的位置完成,通常是在您连接的托管 API 上。如果您还希望在同一台设备上自行托管模型,应根据模型而不是 Hermes 本身为设备配置硬件。对于仅使用 CPU 的模型托管,请参阅Ollama 指南中的参数。