Hermes WebUI 远程访问实战:不开放公网端口,也能随时用手机操控 AI 助手
【免费下载链接】hermes-webuiHermes WebUI: The best way to use Hermes Agent from the web or from your phone!项目地址: https://gitcode.com/GitHub_Trending/he/hermes-webui
想让出差途中的手机也能指挥家里那台跑着 Hermes WebUI 的服务器?咱们按"局域网→隧道→公网→加密"四层递进,把 Hermes WebUI 远程访问与安全配置的最小操作集走一遍,每一层只加一点增量,不推倒重来。
第一层:换个监听地址,让局域网先连上
Hermes WebUI 默认只"接待上门客"——监听地址写死在127.0.0.1,只有本机能敲开它的门。想让局域网里另一台设备访问,第一步就是把这个地址改成"大门口全员开放"。
好消息是不用动源码。server.py启动时会读.env文件(start.sh也会自动加载它),所以在.env里追加三行,分别指定监听地址、端口和登录密码:
HERMES_WEBUI_HOST=0.0.0.0 HERMES_WEBUI_PORT=8787 HERMES_WEBUI_PASSWORD=你的强密码⚠️ 注意:server.py里有一段启动自检,监听地址不是回环又没设密码时,它会直接打印Binding to 0.0.0.0 with NO PASSWORD SET的警告。这不是报错,是它在替你把关。改完记得重启服务,别问我怎么知道的。
怎么验证这一层通了
在服务器上跑ss -tuln | grep 8787,输出里出现0.0.0.0:8787就说明监听面已铺开。再用局域网内另一台设备访问http://<服务器内网IP>:8787,能看到登录页即成功。
第二层:不开公网端口也能远程访问的两种走法
如果你不想在路由器上动任何规则,下面两条路都能走,而且都不把服务暴露给公网。
SSH 隧道:一条命令搭好加密通道
在本地机器执行一条命令,然后在浏览器打开http://localhost:8787:
ssh -N -L 8787:127.0.0.1:8787 user@你的服务器 tailscale serve --bg 8787上面第一条把本地 8787 端口隧道到服务器的回环端口,流量全程走 SSH 加密;第二条是 Tailscale 的发布命令。start.sh检测到你是通过 SSH 登录时,还会自动把这行隧道命令打印出来,照抄就行。
Tailscale Serve:手机直连不用端口转发
服务器和手机各装一个 Tailscale,两者就进了同一个私网。保持 WebUI 回环绑定、设好密码的前提下,跑tailscale serve --bg 8787,手机浏览器直接打开它给出的 HTTPS 地址即可,连证书都不用你操心。⚠️ Linux 上若报serve config denied,先执行sudo -S -p '' tailscale set --operator=$USER授权一次再重试。完整细节看项目自带的 docs/remote-access.md。
界面本身做了移动端适配,会话列表、聊天窗口、工作区文件浏览器在手机上都能正常操作,加到主屏幕后体验接近原生 App。
第三层:真要走公网时,端口转发这样设
前两层都嫌绕、就是想用公网 IP 直连,那就得请路由器出马了。
路由器端口转发设置
登录路由器管理页,找到"端口转发"或"虚拟服务器"选项,添加一条规则:外部端口 8787 指向服务器内网 IP 的 8787,协议选 TCP。配置完成后,外部设备访问http://<公网IP>:8787就能打到你机器上。
防火墙白名单只放你的 IP
服务器防火墙别裸奔。用sudo ufw allow from 203.0.113.0/24 to any port 8787 proto tcp这类规则,把入站访问限定在你信任的网段,比对着全世界开放 8787 端口踏实得多。
第四层:HTTPS 与访问控制,把最后一道门焊死
公网直连意味着密码和会话数据都要过互联网,这一层把加密传输和来源校验补齐。
配 TLS 证书启用 HTTPS
从 Let's Encrypt 拿到证书(内网测试可用自签),在.env里补上证书路径和允许的访问来源:
HERMES_WEBUI_TLS_CERT=/etc/letsencrypt/live/你的域名/fullchain.pem HERMES_WEBUI_TLS_KEY=/etc/letsencrypt/live/你的域名/privkey.pem HERMES_WEBUI_ALLOWED_ORIGINS=https://你的域名这两个 TLS 变量必须同时存在服务才会切到 HTTPS,缺一个就还是明文 HTTP。💡 小技巧:自签证书场景下,ctl.sh、bootstrap.py等健康探活会带着宽松探测参数跑,本机检查不会把健康的 HTTPS 服务误判为 down。
反向代理后还要补的两件事
如果前面还挂了 Nginx 这类反向代理,HERMES_WEBUI_ALLOWED_ORIGINS必须写带协议的完整来源地址,否则 CSRF/origin 校验会拦你。⚠️ 若使用HERMES_WEBUI_TRUSTED_PROXY_CIDRS这套受信代理头认证,CIDR 要精确到代理机 IP,例如10.0.0.5/32,.env.example里专门用大写警告别写0.0.0.0/0——范围内任何客户端都能伪造身份头登录。
连不上?四步排查清单
四层都配完还打不开,按这个顺序查:
ss -tuln | grep 8787确认服务真的监听在0.0.0.0:8787,而不是还卡在回环地址。- 用在线端口检测工具对着公网 IP 和 8787 试一次,先排除"转发规则没生效"。
- 翻
~/.hermes/webui.log(ctl.sh start的日志落点),启动时的安全警告基本写明缺了哪个配置。 - 服务器防火墙和路由器防火墙两头都放行 8787 的 TCP 入站,漏哪一边都不通。
远程访问的底线就一句:先设密码再动监听地址,能不开公网就别开,非要开就配上证书加白名单。想深入可以看仓库里的 docs/remote-access.md,环境变量总表在 README.md 里。
【免费下载链接】hermes-webuiHermes WebUI: The best way to use Hermes Agent from the web or from your phone!项目地址: https://gitcode.com/GitHub_Trending/he/hermes-webui
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考