dsh-remote-access:让 dsh Web 界面监听所有接口

前言

DeepSeek Harness (DSH) 的 Web 界面(通过 --profile web 启动)默认绑定在本地回环地址(通常是 127.0.0.1)。要在局域网内的另一台设备上访问该界面,需要修改服务器的监听地址。dsh-remote-access 插件通过环境变量覆盖配置,允许 Web 界面监听所有网络接口,同时复用 DSH 内置的浏览器认证机制,避免引入额外的认证插件。

插件定位

这是一个由 sysit 维护的出站(Out-of-tree)插件,属于 DSH 的 web-profile bundle。它的核心定位是:
* 轻量级:仅包含一个配置行,不 fork 进程。
* 无侵入认证:不创建新的认证逻辑,完全依赖 DSH 内置的 ?token= BrowserAuth。
* 升级友好:配置为声明式层,重启即生效,无需重新应用。

核心功能

  • 多网卡监听:使 dsh --profile web GUI 能够监听在 0.0.0.0 上。
  • 远程访问:允许从局域网内的其他设备打开该 GUI。
  • 环境变量控制:通过 DSH_WEB_HOST 环境变量覆盖默认的 webserver 配置项。
  • 自动打印 URL:当服务器绑定到 0.0.0.0 时,启动日志会自动打印包含 LAN 地址的 URL。
  • 内置认证:使用 DSH 内置的 ?token= 认证机制,不依赖插件自身实现认证。

安装与启用

安装该插件需要使用 DSH 的插件管理命令。它会将 @sysit/dsh-remote-access 添加到当前 profile 的 dsh.profile.bundles 中。

dsh plugin --profile web install github:sysit/dsh-remote-access

安装后,插件会向 dsh.profile.bundles 注入一个覆盖 webserver host 的配置行。由于它是 profile 级别的补丁,每次 DSH 启动时加载器都会重新读取此配置,因此插件升级或 DSH 升级后无需重新应用。

典型用法

通过设置 DSH_WEB_HOST 环境变量来控制监听地址。默认情况下,如果环境变量未设置,插件会将主机设置为 0.0.0.0。

场景 命令
局域网访问 (默认) export DSH_WEB_HOST=0.0.0.0 && dsh --profile web --no-open
仅本机访问 unset DSH_WEB_HOST 或 DSH_WEB_HOST=127.0.0.1 dsh --profile web
保持默认 export DSH_WEB_HOST="${DSH_WEB_HOST:-0.0.0.0}"

启动成功后,日志中会同时显示本地地址和 LAN 地址:

dsh web: http://127.0.0.1:3080/?token=eqeU… (LAN: http://192.168.1.5:3080/?token=eqeU…)

在另一台设备上打开 LAN: 后面的 URL,即可直接访问。

适用场景与注意事项

  • 网络暴露:将 DSH_WEB_HOST 设置为 0.0.0.0 会使 Harness 暴露在你的网络中。请务必妥善保管打印出的 token,并在远程访问时使用 --no-open 参数以避免浏览器自动打开。
  • 安全机制:DSH 的跨站/DNS 绑定防御(api-request-trust)保持开启,trustedHosts 会自动识别局域网 IP。对于不可信的网络,建议优先使用 SSH 端口转发或 VPN。
  • API 暴露:/api RPC 接口的暴露程度取决于你如何配置 host,插件本身不涉及此配置。
  • 跨进程认证:token 是进程级的,每次重启会变化;但浏览器 Cookie 的有效期默认为 30 天,因此已打开的标签页在重启后通常仍可使用。

结尾

dsh-remote-access 提供了一种简单、标准化的方式来扩展 DSH Web 界面的访问范围,而不引入复杂的第三方认证逻辑。它通过环境变量控制监听地址,利用 DSH 内置的安全机制,适合需要在局域网内共享 DSH Web UI 的开发场景。

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

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

小夜