dsh-remote-v2:为 DeepSeek Harness 提供隔离式远程访问

前言

在本地跑 DeepSeek Harness(DSH)时,开发者常常需要在另一台设备上查看或操作同一套 Web 界面:出差用手机、在另一房间用平板,或临时把会话交给协作者。把 DSH 直接暴露在公网,或把隧道与主进程绑在一起,一旦隧道重启或崩溃,往往会拖垮整个应用。

下面介绍的 dsh-remote-v2(维护者 juntaoqian)把隧道与认证网关放在独立 sidecar 进程里,通过一次性配对与设备会话控制访问路径,属于 DSH 社区目录中的 admin-security 类插件。本文依据仓库 README 与 package.json 整理安装与用法,版本状态为 v0.1.0。

这是什么

dsh-remote-v2 是面向 DeepSeek Harness 的远程访问插件:侧车进程承载隧道与认证网关,DSH 主程序通过薄适配层调用本机 loopback 控制 API;手机浏览器或 PWA 经 HTTPS 进入传输层,再经网关反向代理到本机 DSH Web Server(127.0.0.1)。

设计重点包括:

  • 隧道或网关进程异常时,不连带拖垮 DSH 主进程。
  • 支持可插拔传输:Cloudflare Quick Tunnel(零配置)、Named Tunnel(固定域名)、Tailscale Serve(仅 tailnet)。
  • 一次性配对(256 位 QR 密钥 + 8 位手动码)、设备会话(7 天滑动窗口、可单独或全部吊销)。
  • 网关仅绑定 loopback,对管理面前缀做解码安全的拒绝,并在转发前剥离 hop-by-hop / 边缘相关头。
  • 纯 ESM JavaScript,无构建步骤、运行时无 npm 依赖(QR 生成器为 vendored)。

架构与依赖

请求路径可概括为:手机浏览器 → 传输层(Quick / Named / Tailscale)→ Remote Core(独立 Node 进程:隧道管理、认证网关、配对与设备会话、loopback 控制 API)→ DSH 插件适配层 → DSH Web Server。

运行要求(摘自 README):

  • DSH Desktop / Web >= 0.2.1-rc.2(需 bundled connection + webServer 服务)。
  • Windows x64(MVP):首次启动可自动下载固定版本并校验 SHA-256 的 cloudflared;macOS / Linux 支持计划中。
  • 不额外安装 Node:sidecar 由 DSH 自带的 Electron-as-Node 运行时启动。

package.json 中 engines 约定 Node >= 22.19.0、dsh >= 0.2.1-rc.2。许可证为 MIT。

网络说明:Quick Tunnel 使用 *.trycloudflare.com。README 指出,在部分网络(尤其大陆部分地区)该域名可能无法解析,公网 URL 会不可达,即使 cloudflared 显示 ready。稳定或生产环境更宜使用 Named Tunnel 配自有域名,或在可用代理后使用 Quick Tunnel;本机 loopback 上的网关、配对与代理路径不受影响。

安全模型(摘要)

  • 在隧道报告已校验的 origin 之前,公网入口保持关闭(503);关闭远程访问时会先清除 origin 再结束隧道。
  • 经代理的 HTTP / WebSocket 请求需通过设备会话 cookie 认证;管理前缀 /dsh-remote-v2 对公网拒绝(含百分号解码安全处理)。
  • 配对页仅允许一次性 secret / code 领取,cookie 为 HttpOnly; SameSite=Lax,并带严格 CSP。
  • 持久化仅存设备 token 的 SHA-256 哈希,不以明文长期保存配对码(与 v1 对比)。
  • 网关将 Host / Origin 改写为 loopback DSH 服务地址,转发前剥离 authorization、cf-*、x-forwarded-*、forwarded 及设备 cookie。

README 明确:已配对设备在能力上等同于本地浏览器使用 DSH(含工具执行)。配对码应保密,不再使用的设备应及时吊销。

安装与启用

安装命令须从仓库脚本执行,而非凭插件名拼接 dsh plugin add:

# from this repository
node scripts/install.mjs --profile desktop
# then fully quit and reopen DeepSeek Harness

完全退出并重新打开 DeepSeek Harness 后,在 设置 → 远程访问(仅 loopback)中配置。插件状态目录中的配置示例路径为 ~/.dsh/plugins/dsh-remote-v2/config.json(Named Tunnel token 等敏感项以 mode 0600 存储,README 要求按密码级凭证保管)。

安装前宜自行审阅 源码 与 MIT 许可证;插件与 sidecar 以当前 DSH 进程权限运行,配对成功后的远端会话权限与本地浏览器相当。

典型用法

基本流程

  1. 打开 设置 → 远程访问。
  2. 选择传输方式:
    - Quick Tunnel — 零配置;每次启动 URL 会变。
    - Named Tunnel — 粘贴 Cloudflare Tunnel token 与已配置的公网 hostname。
    - Tailscale(tailscale serve) — 仅 tailnet 内访问(见下节)。
  3. 点击 开启,等待状态为 ready 并出现公网 URL(或 tailnet HTTPS 地址)。
  4. 点击 生成配对码,用手机扫 QR(或输入 8 位码)。
  5. 在同一页管理或吊销已配对设备;用 关闭 停止远程访问。

Named Tunnel(稳定 URL)

需域名 DNS 指向 Cloudflare(免费计划即可),且 Cloudflare Public Hostname 转发目标与插件本地网关端口一致(示例中为 http://127.0.0.1:26001)。

  1. Cloudflare 控制台 → Zero Trust → Networks → Tunnels → Create a tunnel → connector Cloudflared,命名保存。
  2. 从 connector 安装页复制 token(cloudflared service install 后一长串),或 CLI:cloudflared tunnel token <name>。
  3. 为该 tunnel 添加 Public Hostname:例如子域 dsh、服务 HTTP、URL 127.0.0.1:26001(须等于插件本地网关端口)。
  4. 在 设置 → 远程访问 中:传输方式为 Named Tunnel,填入 token、公网地址(如 https://dsh.example.com)、本地网关端口 26001,保存后 开启。
  5. 可选:在 hostname 前加 Cloudflare Access;插件侧配对仍生效。

Tailscale Serve

仅当电脑与手机在同一 Tailscale tailnet 时适用;不经公网暴露(若需公网 funnel 需另用 tailscale funnel)。

  1. 获取本机 DNS 名(Windows 示例):
& 'C:\Program Files\Tailscale\tailscale.exe' status --json |
  ConvertFrom-Json | ForEach-Object { $_.Self.DNSName.TrimEnd('.') }
# e.g. cxqjt.tail7cbe8.ts.net
  1. 启用 Serve(tailnet 所有者):
& 'C:\Program Files\Tailscale\tailscale.exe' serve --bg 26001
  1. 插件中:传输方式为 Tailscale(tailscale serve),公网地址填 https://<dns-name>,本地网关端口与上一步端口一致,保存后 开启。
  2. 手机须在 tailnet 内:扫配对 QR,或打开 https://<dns-name>/pair 输入 8 位码。

停止时:在插件中关闭远程访问,并执行 tailscale serve reset。

更细的步骤与常见问题见仓库内 docs/USAGE.zh-CN.md。

适用场景与注意

适合已在本地稳定运行 DSH、需要从手机或其他设备安全接入同一实例的开发者。Quick Tunnel 适合快速验证;固定域名或国内网络可达性要求高时,优先 Named Tunnel 或 Tailscale。

当前 v0.1.0 已实现 Quick / Named / Tailscale 传输、配对、设备管理、设置 UI 与诊断(README 状态说明)。问题反馈见 GitHub Issues;模块与 API 契约见 docs/contracts.md。

DSH 社区插件目录为独立站点(如 SkillHub 上的 juntaoqian/dsh-remote-v2),与 DeepSeek / 幻方无官方从属关系;安装与启用前请核对版本与源码。

结尾

dsh-remote-v2 用隔离 sidecar、认证网关与一次性配对,把 DSH 远程访问从主进程拆开,并支持多种传输方式。若你正在使用 DSH >= 0.2.1-rc.2,可按仓库安装脚本部署,在 设置 → 远程访问 中完成配对与设备管理。

  • 目录页:https://www.skillhub.cn/plugins/juntaoqian/dsh-remote-v2
  • 源码与 README:https://github.com/juntaoqian/dsh-remote-v2
羽毛球分组比赛记分
小程序二维码

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

小夜