dsh-remote-mobile
远程与移动端安全网关:零改动 DSH 底层代码开放 Tailscale/局域网访问,支持扫码配对、RSA 加密、防暴力破解与移动端样式片段;与其他远程插件共存时自动让出共享配对服务,避免启动崩溃。
安装
dsh plugin --profile web add dsh-remote-mobile
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
<div align="center">
dsh-remote-mobile
DeepSeek Harness (DSH) 远程与移动端安全接入代理插件





<p align="center">
<b>无需修改 DSH 源码(运行时插件接管) · 局域网 / Tailscale 安全接入 · 扫码配对 · 移动端样式适配 · 工作区能力复用 · 实时状态推送</b>
</p>
<p align="center">
📱 <b>桌面级移动工作台</b>:手机上也能新建 / 切换工作区、执行终端命令<br>
🛡️ <b>多重安全认证</b>:扫码配对 · 长期密码 · 免密直连 + RSA 加密 + 防爆破封禁<br>
🎨 <b>移动端样式片段</b>:内置三段预设,不满意可自定义 CSS
</p>
[English Documentation](./README_EN.md) · [简体中文](./README.md)
<p align="center">
<a href="#about">这是什么</a> •
<a href="#advantages">核心优势</a> •
<a href="#quick-start">快速开始</a> •
<a href="#modes">接入模式</a> •
<a href="#config">网络配置</a> •
<a href="#preview">界面预览</a> •
<a href="#features">功能特性</a> •
<a href="#install">安装与更新</a> •
<a href="#advanced">高级配置</a> •
<a href="#storage">本地文件存储</a> •
<a href="#faq">常见问题</a>
</p>
</div>
<span id="about"></span>
📖 这是什么
dsh-remote-mobile 是专为 DeepSeek Harness (DSH) 深度定制的远程与移动端安全治理插件。
DSH 核心服务出于安全考虑默认仅监听本地回环地址(127.0.0.1),手机、平板或其他电脑无法从外部访问 Web 控制台。本项目通过访问控制中间件与请求隔离技术,安全地开放了 Tailscale 虚拟私网 以及 本地局域网 (Wi-Fi/LAN) 访问能力,并提供登录凭证 RSA 加密、扫码配对、长期密码认证与防暴力破解审计体系。插件本身不提供全链路 TLS;完整传输加密需依赖 Tailscale 或外层 HTTPS。
手机端访问时,插件还针对 DSH 界面做了移动端样式适配:侧边栏抽屉折叠与可拖拽展开把手、新版官方三栏 Grid 布局与右侧边栏兼容、设置弹窗居中微缩、对话正文高密度排版等,让手机上的使用体验更贴近桌面端。
<span id="advantages"></span>
⚡ 核心优势
- 🚀 突破网络壁垒,复用桌面端能力:用于在局域网 / Tailscale 下访问 DSH Web。在移动端或外部设备访问时,支持新建工作区、切换工作区、执行终端命令等常用桌面端操作。
- 📱 手机端专属适配与同源复用:直接复用 DSH 官方 Web 前端(手机与桌面是同一套界面)与各类生态插件(如侧边栏、任务看板、终端面板等),无需单独维护手机端后台。插件已针对移动端做好了基础响应式适配(如侧边栏抽屉折叠、设置弹窗居中、对话正文字号与行距精细调小以提升一屏信息量),并内置样式片段覆写功能,支持开箱即用或按需注入自定义 CSS 样式小插件。
- 🛡️ 安全门禁与登录凭证加密:登录凭证使用 RSA 非对称公钥加密,
scrypt加盐慢哈希密码落盘,连续输错自动熔断锁定 IP,拦截公网/局域网未经授权的访问。 - 📲 扫码快速配对:自动识别并生成 Tailscale CGNAT 与局域网专属访问链接与二维码,手机扫码打开已预填配对码的登录页,确认后完成授权。
- 🔄 SSE 实时状态推送:设备接入、重连、注销、IP 锁定等事件通过 SSE 推送;设置页仍保留低频轮询作为兜底。
- 🤝 插件通用共存保护:与其他远程/Web 接入类插件并存时自动让出共享服务,尽量避免共存冲突导致启动失败,设置页提供冲突警示横幅与一键复制的「诊断与修复报告」。
<span id="quick-start"></span>
🚀 快速开始
1. 一键安装插件
在终端执行 DSH 官方插件安装指令(推荐):
dsh plugin --profile web add dsh-remote-mobile
[!IMPORTANT]
生态插件安装建议:不建议安装 @linxin666/dsh-web-all 全家桶,更推荐按需安装单体功能插件。全家桶将多个前端模块合并打包,可能引发移动端悬浮入口重复与手势交互冲突;如需任务看板、宠物等生态功能,建议直接安装对应的单体包(原因、推荐命令与共存说明见 [常见问题 Q6](#faq))。
<span id="config"></span>
2. 前置配置(插件 1.10.0+ 无需 webserver 配置)
本插件 1.10.0+ 不需要修改 webserver 或 cordis.patch.yml:
- DSH 0.2.1+ 保持默认
127.0.0.1:3080; - 本插件自动启动
3081安全接入代理; - 手机扫码或使用长期密码即可接入。
本节适用于本插件 1.10.0+。
安全权衡说明:安全接入代理默认监听 0.0.0.0:3081(暂不含 TLS)。若在公共 Wi-Fi 或未经保护的网络下使用,建议配合 Tailscale(WireGuard 隧道加密)或外层 HTTPS。
<details>
<summary><b>插件 1.9.0 之前的配置迁移(DSH 0.2.1+)</b></summary>
本插件 1.9.0 之前的配置,或曾手动配置 webserver.host: 0.0.0.0 的配置,需要按以下步骤迁移。本插件 1.10.0+ 可直接跳过本节。
DSH 0.2.1+ 会拒绝 0.0.0.0,并在插件加载前直接启动失败。请删除或注释整个 webserver 配置块:
# ❌ DSH 0.2.1+ 下会启动失败 # - id: webserver # host: '0.0.0.0' # ✅ 保持默认回环监听 # 无需配置 webserver;DSH 使用 127.0.0.1:3080, # dsh-remote-mobile 自动使用 3081 安全接入代理。
不确定当前配置时:
grep -n -A5 'id: webserver' ~/.dsh/profiles/web/cordis.patch.yml
若看到 host: '0.0.0.0',删除对应配置块;没有则无需处理。
DSH 0.1.7 ~ 0.2.0 可以保留 0.0.0.0,插件会回退 direct 模式;若通过自定义域名或公网 IP 访问,请配置 trustedHosts。
</details>
如果您安装了其他可能产生冲突的插件,推荐在 ~/.dsh/profiles/web/cordis.patch.yml(Windows 对应 %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml)中禁用冲突项:
# (推荐)只保留一款远程/Web 接入类插件,避免功能重复与入口混乱 # 本插件与其他远程接入类插件共存时也能正常启动:检测到配对共享服务被占用 # 会自动让出,并在设置页顶部展示警示横幅说明详情。 # 示例:禁用 @linxin666/dsh-web-ui-all 内置的远程插件 - id: web-ui-remote-web-ui disabled: true
💡 说明:插件自身注册已由 DSH Bundle 体系全自动处理,无需在cordis.patch.yml中额外添加id: remote-mobile。Windows 用户可按Win + R键输入%USERPROFILE%\.dsh\profiles\web快速直达配置目录。
[!WARNING]
不建议安装聚合全家桶(@linxin666/dsh-web-all):它会把多个子插件的前端逻辑合并打包到同一个client.js中,加载时自执行,可能与本插件产生移动端入口重复与手势冲突。推荐按需安装所需单体插件(如任务看板、宠物等)。完整原因、推荐命令与共存说明见 [常见问题 Q6](#faq)。
3. 启动并使用
dsh web --no-open
启动后,在电脑浏览器打开 DSH Web 控制台,进入 设置 ⚙️ -> 远程与移动端,使用手机微信或系统相机扫描二维码进入配对/登录页,完成授权后即可使用。
设置面板按 「接入 / 设备与安全 / 样式覆写 / 本地数据」 四个页签分组显示,避免长页面;页签选择会被记住,切换不重置配对码等状态。
<span id="modes"></span>
🧭 版本与接入模式
本插件 1.10.0+ 默认使用 proxy,不需要配置 webserver:
场景 · DSH 核心监听 · 生效模式 · 手机访问
DSH 0.2.1+ + 插件 1.10.0+ · 127.0.0.1:3080 · proxy · 3081
DSH 0.1.7 ~ 0.2.0 + 0.0.0.0 配置 · 0.0.0.0:3080 · direct(自动回退) · 3080
DSH 0.2.1+ + 具体网卡 IP · 192.x.x.x:3080 · direct · 3080
同机反向代理 · 127.0.0.1:3080 + 显式 direct · direct · 反代入口
proxy:推荐;核心保持回环,插件在3081提供认证与转发。direct:不启动代理;要求核心本身对外可达,主要用于 DSH 0.1.7 ~ 0.2.0 的0.0.0.0配置或高级部署。direct+ 回环核心:DSH 只监听127.0.0.1,手机无法直接访问;只有再通过同机 Nginx / Caddy / Tailscale Serve 等反向代理转发到3080时才有意义,否则只能本机使用。
访问链路与认证判定
判定不能只看 TCP 来源 IP(socket 地址):Host 与 X-Forwarded-* 也会改变结果。socket IP 是服务器看到的 TCP 对端地址,不是 Host,也不是 X-Forwarded-For。
访问方式 · 链路 · 判定 · 插件登录
A 本机直连 · PC → 127.0.0.1:3081 · 本机回环(loopback) · 不需要
B 手机直连 · 手机 → 192.x.x.x:3081 / 100.x.x.x:3081 · 外部直连(external) · 需要(可开 allowLan/allowTailscale 免密)
C 同机反向代理 · 手机 → Nginx → 127.0.0.1:3081
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:17,最后更新 2026-11-03