当前位置:首页 > 人工智能 > 正文

如何通过Hermes桌面端连接远程网关

如何通过Hermes桌面端连接远程网关  第1张


最近安装了Hermes Desktop,使用下来感觉挺不错的,但我之前的Hermes是装在迷你主机上装,就研究了下如何电脑连接之前装的Hermes,这样就不用重新配置,以前的记忆也都在。

也不算复杂,就是把 hermes dashboard 跑在你的迷你主机、NAS或 VPS 上,桌面端可以从任何地方连接。这样Hermes可以24小时运行,你只是换了个"屏幕"去操作。

下面我把整个流程详细说说。

先看看这个架构

hermes dashboard:这个估计以前很多人用过,官网的仪表盘,现在这个也成了桌面端真正要连的后端进程,运行在远程机器上,负责管理 Agent 的状态、配置、记忆。桌面端本质上是这个 dashboard 的前端壳。

hermes gateway(消息网关):这是处理 Telegram、Discord、Slack 这些消息渠道的另一个进程,跟 dashboard 是分开的,需要单独启动。别搞混了。

Hermes Desktop:跑在你本地电脑上的客户端,默认情况下它自己管理一套本地后端,但你可以让它改连远程的 dashboard。

所以整个流程就是:在远程机器上把 dashboard 跑起来,本地桌面端指向它,完事。

选择你的部署方案

根据服务器的位置不同,有两条路线:

方案一:局域网

服务器和你的电脑在同一个网络下,比如家里的迷你主机、NAS、台式机、树莓派。直接用局域网 IP 访问,不需要任何额外工具,配置最简单。缺点是出门在外就连不上了。

方案二:VPS + Tailscale

服务器是云上的 VPS,或者你需要在外网也能访问。用 Tailscale 把 VPS 和本地电脑组成一个私有网络,dashboard 只监听 Tailscale 的虚拟网卡,禁止公网 IP访问。随时随地都能连,安全性也有保障。

两个方案的认证都走用户名+密码,因为流量本身已经在可信网络里了,不需要 OAuth 那一套。

共同准备:写入认证凭据

两个方案都需要先做这一步。凭据存在 ~/.hermes/.env 里,登录服务器执行:

cat >> ~/.hermes/.env <<'EOF'
HERMES_DASHBOARD_BASIC_AUTH_USERNAME=admin
HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=你的强密码
HERMES_DASHBOARD_BASIC_AUTH_SECRET=$(openssl rand -base64 32)
EOF
chmod 600 ~/.hermes/.env

HERMES_DASHBOARD_BASIC_AUTH_SECRET 是 session token 的签名密钥,必须设一个固定值。不设的话 dashboard 每次重启都生成新密钥,桌面端的登录状态随之失效,每次重启都要重新登录。

方案一:局域网

配置 systemd 服务

先确认 hermes 的绝对路径,systemd 不走交互式 shell,ExecStart 必须写绝对路径:

which hermes

创建服务目录,写 Unit 文件:

mkdir -p ~/.config/systemd/user/
nano ~/.config/systemd/user/hermes-dashboard.service
[Unit]
Description=Hermes Agent Dashboard
After=network.target

[Service]
Type=simple
EnvironmentFile=%h/.hermes/.env
ExecStart=/home/%u/.hermes/hermes-agent/venv/bin/hermes dashboard --no-open --host 0.0.0.0 --port 9119
Restart=on-failure
RestartSec=5s
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=default.target

局域网方案用 --host 0.0.0.0,监听所有网卡,局域网内的机器都能直接访问。ExecStart 里的路径换成你刚才查到的实际路径。

加载并启动:

systemctl --user daemon-reload
systemctl --user enable hermes-dashboard
systemctl --user start hermes-dashboard
systemctl --user status hermes-dashboard

看到 Active: active (running) 就正常了。

最后开启 linger,让服务在你不登录时也能自动运行:

loginctl enable-linger $USER

桌面端填写的 Remote URL

http://<服务器局域网IP>:9119

局域网 IP 通常是 192.168.x.x 这类地址,在服务器上用 ip addr 查。

方案二:VPS + Tailscale

安装并配置 Tailscale

服务器和本地电脑都需要安装 Tailscale,并加入同一个 tailnet。

服务器端安装:

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

执行 tailscale up 后会输出一个授权链接,在浏览器里打开,用你的 Tailscale 账号授权这台机器加入 tailnet。

本地电脑安装:

去 tailscale.com/download 下载对应平台的客户端,登录同一个账号即可。两台机器加入同一个账号的 tailnet 后就能互相访问。

安装完成后,查出服务器的 Tailscale IP:

tailscale ip -4

返回 100.x.x.x 格式的地址,记下来,后面要用。

配置 systemd 服务

mkdir -p ~/.config/systemd/user/
nano ~/.config/systemd/user/hermes-dashboard.service
[Unit]
Description=Hermes Agent Dashboard
After=network.target tailscaled.service
Requires=tailscaled.service

[Service]
Type=simple
EnvironmentFile=%h/.hermes/.env
ExecStart=/home/%u/.hermes/hermes-agent/venv/bin/hermes dashboard --no-open --host 100.x.x.x --port 9119
Restart=on-failure
RestartSec=5s
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=default.target

和方案一有两处不同:

--host 100.x.x.x:换成你的 Tailscale IP,dashboard 只在这块虚拟网卡上监听,公网网卡完全不暴露。

After=tailscaled.service + Requires=tailscaled.service:确保 Tailscale 已就绪再启动 dashboard。如果 Tailscale 还没起来,那个 100.x.x.x 地址不存在,dashboard 绑定会直接失败。

把 ExecStart 里的路径和 IP 换成实际值,然后加载启动:

systemctl --user daemon-reload
systemctl --user enable hermes-dashboard
systemctl --user start hermes-dashboard
systemctl --user status hermes-dashboard
loginctl enable-linger $USER

配置防火墙

这一步是第二层保障。绑定到 Tailscale IP 已经让公网无法直接访问 dashboard,但加一道防火墙规则可以防止配置被意外改回 0.0.0.0 时裸奔。

# 只允许来自 Tailscale 网段的流量访问 9119
sudo ufw allow in on tailscale0 to any port 9119

# 明确拒绝公网访问 9119
sudo ufw deny 9119

# 确认规则
sudo ufw status

tailscale0 是 Tailscale 的虚拟网卡名,allow in on tailscale0 表示只放行从这块网卡进来的流量,从公网网卡(eth0 等)来的请求全走 deny 规则。

配置完成后验证一下:

# 从本地(已加入 tailnet)测试,应该能通
curl http://100.x.x.x:9119/api/status

# 用 VPS 公网 IP 测试,应该被拦
curl http://<VPS公网IP>:9119/api/status

桌面端填写的 Remote URL

http://100.x.x.x:9119

填 Tailscale IP,不要填公网 IP。

桌面端接入

两个方案的桌面端操作完全相同,只是 URL 不同(见各自方案末尾)。

打开 Hermes Desktop,进入 Settings -> Gateway -> Remote gateway,填写三样东西:

Remote URL:填入对应方案的地址。

Sign in:点击后弹出凭据输入框,填入之前设置的用户名和密码。

Save and reconnect:保存后桌面端切换到远程后端,session 自动刷新。设置了 HERMES_DASHBOARD_BASIC_AUTH_SECRET 的话,重启后登录状态保持,不用每次重新登录。

如果不想每次都进 UI 改,可以在启动桌面应用之前设置环境变量,它会覆盖界面里的设置:

HERMES_DESKTOP_REMOTE_URL=http://100.x.x.x:9119

常用运维命令

# 查实时日志
journalctl --user -u hermes-dashboard -f

# 查最近 100 行日志
journalctl --user -u hermes-dashboard -n 100

# 重启服务(修改 .env 后必须执行,否则变更不生效)
systemctl --user restart hermes-dashboard

# 停止服务
systemctl --user stop hermes-dashboard

遇到问题先看这里

401 / "Invalid credentials":用户名或密码对不上。dashboard 对两种错误返回同一个提示(防枚举),两个都要核查。确认认证是否已启用:

curl -s http://<host>:9119/api/status | jq '.auth_required, .auth_providers'

返回 true 和包含 "basic" 就对了。

没有"Sign in"按钮,要求输入 session token:用户名密码认证没有生效。检查 .env 里的两个变量是否都有值,以及 dashboard 进程是否确实重新加载了这个文件。

每次重启都掉登录HERMES_DASHBOARD_BASIC_AUTH_SECRET 没有设固定值,见"共同准备"一节。

连接被拒绝或超时(局域网方案):dashboard 还在绑定 127.0.0.1,或者防火墙没放行 9119 端口。检查启动参数里的 --host 以及防火墙规则。

连接被拒绝或超时(Tailscale 方案):先确认本地机器的 Tailscale 是否在线(tailscale status),再确认服务器上 tailscaled 服务是否正常运行(systemctl status tailscaled)。Tailscale 掉线后 dashboard 也无法访问。

dashboard 启动失败,日志显示地址绑定错误:Tailscale 方案里 dashboard 先于 tailscaled 启动,导致 100.x.x.x 地址还不存在。检查 Unit 文件里 Requires=tailscaled.service 是否已添加。

如果桌面端报启动失败,日志在 HERMES_HOME/logs/desktop.log,也可以用命令实时查看:

hermes logs gui -f

一点感受

局域网方案配置零门槛,家里有台常开的机器就够了;Tailscale 方案配置多几步,但换来的是随时随地都能连,公司、家里电脑打开桌面端,可以连同一个Hermes,你的聊天记录、记忆都在,而且安全性更高。


相关文章:

文章已关闭评论!