前言¶
DeepSeek Harness(DSH)的 Web 界面默认只监听本机 127.0.0.1。上游出于安全考虑不允许把 Web 服务直接绑到 0.0.0.0,否则会把远程代码执行面暴露到局域网。若你希望在同一 Wi‑Fi 下用手机浏览器查看会话、改设置或跟进任务,常见做法是改端口转发或自己搭反向代理,还要处理 DSH 0.1.5 起引入的浏览器会话认证,手机端很容易卡在 dsh web authentication required。
下面介绍社区插件 dsh-mobile-access(维护者 MacilyDots,分类:客户端)。它在不修改 DSH 源码的前提下,在 DSH 进程内启动独立 HTTPS 网关,用 PIN 与反向代理把访问引到本机 Web 端口,并桥接 DSH 的浏览器会话握手,使手机扫码即可使用。
这是什么¶
dsh-mobile-access 是 DeepSeek Harness 的移动访问插件:同一局域网内,用手机扫描设置页上的二维码(或手动输入地址),在本机浏览器之外访问正在运行的 DSH。
实现思路参考社区项目 dsh-mobile 的安全网关概念,但范围收窄为「局域网 + 手机浏览器」:不包含 Tailscale/cpolar/FRP 等远程隧道,也没有 Android 独立客户端;代码在插件仓库内可见、由你自行安装与审计。
- 目录页:https://www.skillhub.cn/plugins/MacilyDots/dsh-mobile-access
- 源码:https://github.com/MacilyDots/dsh-mobile-access
- 当前 package 版本:0.2.0(MIT 许可证)
- 默认关闭;上次若已开启,DSH 重启后会自动恢复开启状态(仍受 PIN 与证书缓存约束)
核心机制与安全边界¶
插件不改动 DSH Web 服务器,DSH Web 始终留在 127.0.0.1。在 DSH 进程内它会:
- 启动监听
0.0.0.0:<port>的 HTTPS 网关(自签证书); - 将请求 反向代理 到
127.0.0.1:<DSH webServer 端口>; - 对网关侧做 PIN 认证:手机浏览器首次打开须输入 PIN,通过后网关设置 httpOnly 会话 cookie,后续请求(含 WebSocket)须已认证;
- 转发时重写
Host/Origin/sec-fetch-site,使 DSH 的浏览器信任边界仍把/api与 SSE/WebSocket 视为同源; - 桥接 DSH ≥ 0.1.5 的浏览器会话认证:在服务端用进程内 startup token 调用
connection.authenticatedUrl(),经GET /?token=…换取dsh-auth-<authority>cookie 并缓存、注入后续转发;token 不下发到手机。会话失效(重启、改端口、cookie 过期)时网关收到 401 会清缓存、重新交换并重试一次。
0.2.0 起网关 PIN 会话 token 会持久化,DSH 重启后手机不必重复输入 PIN;并发未认证请求对 DSH 会话 cookie 的交换会做单次合并。
安全边界(README 原文强调):开启后网关在局域网可见,仅靠 PIN 保护。仅建议在可信的家庭或办公 LAN 使用,PIN 须足够强;不能替代公网暴露时的完整安全方案。
依赖(运行时):selfsigned(自签证书)、qrcode(访问地址二维码)、http-proxy(HTTP/SSE/WebSocket 透传)。
安装¶
安装命令以仓库 README 为准。将 <profile> 换成你的 DSH profile 名称:
# Install from GitHub (recommended)
dsh plugin --profile <profile> add github:MacilyDots/dsh-mobile-access
# Or install from a local clone
dsh plugin --profile <profile> add file:<absolute path to this repository>
dsh --profile <profile>
dsh plugin add 会通过 pnpm add 安装,并为声明了 dsh.bundle 的插件写入 profile 的 bundles 层。安装后必须重启 DSH,插件才会加载。
插件以当前 DSH 进程权限运行;安装前请自行阅读 index.js、client.js 与 LICENSE,确认符合你的信任与合规要求。
典型用法¶
经过上面的安装与重启,按下列步骤启用局域网访问:
- 打开 DSH 设置页,进入 Mobile access(移动访问)卡片。
- 设置至少 4 位的 access PIN,点击 Enable LAN access;端口默认 3443,可修改。
- 面板会显示 access address(形如
https://<本机 LAN IPv4>:<port>)和 QR code。 - 手机接入 同一局域网,用系统浏览器扫码或手动输入地址。
- 首次访问:浏览器会提示 信任自签证书(需确认);随后输入 PIN 即可操作 DSH Web。
- 用完后在设置页点击 Disable mobile access 关闭网关。
说明:
- 自签证书首次启用时生成,缓存在
$DSH_HOME/mobile-access/cert.pem与key.pem(2048 位 RSA,有效期 400 天)。手机浏览器上的「证书不受信任」属预期;各浏览器「继续访问」入口位置不同(iOS 上多为「显示详细信息 → 访问此网站」)。 - 若升级到 DSH ≥ 0.1.5 后手机仍出现
dsh web authentication required,应使用含会话桥接的 0.2.0 网关逻辑;手机端无需额外步骤。 - 仅支持 IPv4 局域网地址;换网后通常需重新启用(或 DSH 重启后按持久化策略再开)。
本机浏览器还可通过 DSH 回环 Web 服务器访问控制接口(不经过对外网关):
GET /dsh-mobile-access/status— 状态(含 QR 的 dataURL)POST /dsh-mobile-access/enable— body:{ pin, port? }POST /dsh-mobile-access/disablePOST /dsh-mobile-access/pin— body:{ pin }
运行时状态与证书目录:$DSH_HOME/mobile-access/。
适用场景与限制¶
适合:已在台式机或笔记本上跑 DSH,希望在同一 Wi‑Fi 下用手机浏览器临时查看或操作,且接受「PIN + 自签 HTTPS + 可信 LAN」这一安全模型。
不适合或未实现:公网暴露、设备配对、远程隧道、独立 Android 应用——这些属于 dsh-mobile 等更宽方案,本插件刻意不做。
限制(README 列举):
- 仅 IPv4 LAN;
- 切换网络后需再次启用(或依赖重启后的恢复行为再确认);
- 无 dsh-mobile 的设备配对与远程隧道能力。
结尾¶
dsh-mobile-access 把「DSH 只监听本机」与「手机要在局域网里用浏览器访问」之间的矛盾,用独立 HTTPS 网关、PIN、反向代理和 DSH 0.1.5+ 会话桥接拆开处理,DSH Web 仍绑定在 127.0.0.1。若你的需求就是可信 LAN 内的扫码访问,可按官方命令安装并在设置里显式开启。
- 社区目录:https://www.skillhub.cn/plugins/MacilyDots/dsh-mobile-access
- GitHub:https://github.com/MacilyDots/dsh-mobile-access
DeepSeek Harness 生态强调「一切皆插件」;SkillHub 等目录为社区维护,与 DeepSeek / 幻方无官方从属关系。选用第三方插件前请核对源码、许可证与自身安全策略。