前言¶
DeepSeek Harness(DSH)在 Desktop 壳或 dsh web 模式下启动 Web GUI 时,每次都会重新分配随机端口和一次性 launch token,终端里打印的 URL 随之变化。书签、手机主屏快捷方式或局域网分享因此很难长期可用。社区插件 dsh-share-webui(维护者 vantoo)在 Host 进程内运行固定端口转发,对外保留稳定地址,并在内部完成 token 握手。本文基于 GitHub 仓库 README 介绍其定位、能力与用法;DSH 生态以「一切皆插件」为思路,SkillHub 目录页 为社区收录站点,与 DeepSeek / 幻方无官方从属关系。
这是什么¶
dsh-share-webui 归类为联网工具:把当前 harness 实例的 Web GUI 通过可配置的固定端口和可选监听范围(本机回环、局域网、Tailscale 等)共享出去;设置页 Settings → Web sharing 可即时切换主机、复制稳定入口与会话链接。插件版本在 package.json 中为 0.3.1,许可证 MIT,要求 DSH >= 0.2.1-rc.2(README 徽章;package.json 的 engines.dsh 另标注上限,安装前请以你本地的 DSH 版本与插件声明为准)。
核心功能¶
稳定地址与多主机监听¶
- 回环地址默认始终提供服务(默认
http://127.0.0.1:30800,端口可在设置中修改);按所选主机分别监听,局域网与 Tailscale 地址需显式勾选启用。 - Settings → Web sharing 中可 live 切换 Host;选择会持久化,无需重启 harness。
- 同时支持 Desktop 与
dsh web两种 profile。
设置页能力概览¶
| 项 | 作用 |
|---|---|
| Fixed port | 固定入口背后的端口(默认 30800)。「Apply」会先探测再绑定:成功显示绿色「Port is available」,端口被占用则红色提示且不切换。填 0 可关闭固定入口。 |
| Allowed hosts | 以方块展示本机(127.0.0.1,始终开启)、LAN、Tailscale(100.x,含 MagicDNS 名)、Any host(0.0.0.0,有风险)。多选后转发器立即重绑。 |
| Host | 固定入口使用的 hostname,下拉仅列出已选主机。 |
| Fixed entry | 稳定 URL,可复制。 |
| Session link | 带 token 的本会话 URL,可复制。 |
| Access control | 仅在主机侧(Desktop 壳,或通过 127.0.0.1 打开的设置页)生成六位配对码、查看已配对设备并逐台撤销;远程页面看不到该区块。 |
首次选择与后续变更写入 $DSH_HOME/share-webui.json,重启后仍有效。LAN 地址优先通过 UDP connect 探测本机出口地址(不发包、不解析域名),失败再回退到 route/ip 或网卡名启发式;Tailscale 会从 tailscale status --json 读取 MagicDNS 名并加入允许列表。
访问控制(配对)¶
固定入口默认不面向陌生人:除回环外,访问需先配对一次。
- 在 Settings → Web sharing → Access control 点击「Generate pairing code」获取六位码(有效期 10 分钟,一次性;「Cancel code」可立即作废)。
- 在手机或平板上打开固定入口(例如
http://192.168.1.10:30800/),在配对页输入该码。 - 浏览器获得
dsh-share-devicecookie(HttpOnly、SameSite=Lax、一年),之后直接进入 Web GUI。
同一地址 5 分钟内最多 5 次尝试;错误猜测不会作废当前码(避免配对 DoS)。已配对设备列表支持按设备 Revoke,立即生效。设备记录保存在 $DSH_HOME/share-webui-devices.json(权限 600,仅存各设备 secret 的 SHA-256)。网关不提供管理页:未配对访客只会看到配对表单;发码、列设备、撤销均通过主机校验的 RPC 在 DSH 设置页完成。
完全开放可在配置中将 access 设为 open,但设置页关闭 Host 检查需显式确认,且每次启动会打警告日志。
Cloudflare Access(经 tunnel 暴露时)¶
当 cloudflared 将固定入口发布到公网时,请求可能一律来自 127.0.0.1,从而绕过配对。插件可选启用 Cloudflare Access:对携带 Cloudflare 边缘头或 Cf-Access-Jwt-Assertion 的请求校验 JWT(RS256,iss/aud/exp/nbf,公钥自 <team>/cdn-cgi/access/certs 拉取并缓存 10 分钟,拉取失败则 fail closed)。回环与 LAN 无这些头时仍走配对,两路径互不干扰。首次 Access 登录成功后同样发放一年期 dsh-share-device cookie,设备可在列表中按邮箱展示并单独撤销。
可选 YAML 配置¶
日常使用以设置页为主;也可在 profile 的 cordis.patch.yml 中写入初始种子(与持久化文件并存时,以 $DSH_HOME/share-webui.json 为准):
- id: share-webui
name: dsh-share-webui
config:
fixedPort: 30800 # 首次运行端口;0 关闭固定入口
fixedHost: 127.0.0.1 # 强制单一绑定接口(替代按主机分别监听)
access: pair # pair(默认)或 open
trustLoopback: true # 置于 tunnel/反代后时可设为 false
hosts:
- loopback
- tailscale
hosts 支持关键字 loopback、lan、tailscale、any(及 *)或字面 hostname。
安装与启用¶
Desktop 环境从 GitHub 安装:
dsh plugin --profile desktop add github:vantoo/dsh-share-webui
本地开发可用 link: 指向绝对路径。安装后需重启应用。若使用 dsh web profile,将 --profile desktop 换为 --profile web。
典型用法¶
- 安装插件并重启 DSH。
- 打开 Settings → Web sharing,按需设置 Fixed port 与 Allowed hosts,选择 Host,复制 Fixed entry 用于书签或手机浏览器。
- 若从 LAN 或 Tailscale 访问,在主机设置页生成配对码,在远端设备打开固定入口并完成配对。
- 若经 Cloudflare tunnel 暴露,在设置页填写 team domain、AUD tag、公网 hostname 并启用 Cloudflare Access,再按 README 中的 Setup 步骤在 Zero Trust 侧创建应用。
需要本会话真实 URL(含 launch token)时,使用 Session link 复制即可;固定入口则在内部完成 token 握手。
适用场景与注意¶
- 适合:需要在 Desktop 或
dsh web下长期保留同一 Web GUI 地址、在局域网或 Tailscale 上用第二设备访问、或配合 tunnel 与 Cloudflare Access 做受控暴露的 DSH 用户。 - 安全:固定入口背后是已认证会话——进入者即控制当前 harness(工具、文件等),因此默认配对。插件在当前 dsh 进程权限下运行;安装前请自行审阅 源码 与 MIT 许可证,勿在未理解风险时勾选 Any host 或
access: open。 - 代理:Cloudflare JWT 校验直连
https://<team>/cdn-cgi/access/certs,忽略系统代理;主机若仅能经代理上网,校验会失败(关闭而非放行)。
结尾¶
dsh-share-webui 解决的是「每次重启 URL 都变」这一具体痛点:固定端口、可选监听范围、设置页内切换与复制链接,并以配对(及可选 Cloudflare Access)约束非本机访问。进一步了解可访问目录页 skillhub.cn/plugins/vantoo/dsh-share-webui 与仓库 github.com/vantoo/dsh-share-webui。