dsh-share-webui:为 DSH Web 界面提供固定入口与设备配对

前言

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 名并加入允许列表。

访问控制(配对)

固定入口默认不面向陌生人:除回环外,访问需先配对一次。

  1. 在 Settings → Web sharing → Access control 点击「Generate pairing code」获取六位码(有效期 10 分钟,一次性;「Cancel code」可立即作废)。
  2. 在手机或平板上打开固定入口(例如 http://192.168.1.10:30800/),在配对页输入该码。
  3. 浏览器获得 dsh-share-device cookie(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。

典型用法

  1. 安装插件并重启 DSH。
  2. 打开 Settings → Web sharing,按需设置 Fixed port 与 Allowed hosts,选择 Host,复制 Fixed entry 用于书签或手机浏览器。
  3. 若从 LAN 或 Tailscale 访问,在主机设置页生成配对码,在远端设备打开固定入口并完成配对。
  4. 若经 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。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye