扫码用手机浏览器安全访问电脑上的 DSH 界面
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/10 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add MacilyDots/dsh-mobile-access该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 22 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 13 处,展示前 12 条)
- 读取本地文件index.js:106
return JSON.parse(readFileSync(statePath(), "utf8")); - 写入本地文件index.js:112
mkdirSync(defaultStateDir(), { recursive: true }); - 写入本地文件index.js:113
writeFileSync(statePath(), JSON.stringify(state, null, 2)); - 写入本地文件index.js:131
mkdirSync(dir, { recursive: true }); - 写入本地文件index.js:132
writeFileSync( - 读取本地文件index.js:246
if (existsSync(certPath()) && existsSync(keyPath())) { - 读取本地文件index.js:247
const cert = readFileSync(certPath(), "utf8"); - 读取本地文件index.js:248
const key = readFileSync(keyPath(), "utf8"); - 写入本地文件index.js:274
mkdirSync(defaultStateDir(), { recursive: true }); - 写入本地文件index.js:275
writeFileSync(certPath(), pems.cert); - 发起网络请求client.js:46
return fetch(apiUrl("/dsh-mobile-access/status")) - 发起网络请求client.js:55
return fetch(apiUrl(path), {
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 手机扫码访问
- 局域网内浏览器访问
DeepSeek Harness 移动访问插件:同一局域网内手机扫码、浏览器访问。独立 HTTPS 网关 + PIN 认证 + 反向代理 + DSH 浏览器会话认证桥接,不修改 DSH 源码,DSH Web 仍留在 127.0.0.1。
README
由 DeepSeek 最新模型翻译生成dsh-mobile-access
DeepSeek Harness 移动访问插件:同一局域网内,手机扫码后用自己的浏览器访问电脑上的 DSH。
这是参考 dsh-mobile 安全网关思路的自研版本,功能聚焦在「局域网 + 手机浏览器访问」,去掉了远程通道(Tailscale/cpolar/FRP)与 Android App 部分,代码完全可见、可控。
它做了什么、为什么安全
DSH 官方禁止 --host 0.0.0.0(会把远程代码执行暴露到网络)。因此本插件不修改 DSH 的 web server,DSH Web 始终留在 127.0.0.1 上。插件在 DSH 进程内另起一个:
- 独立的 HTTPS 网关(自签名证书),监听 0.0.0.0:<port>;
- 把请求反向代理到 127.0.0.1:<DSH webServer 端口>;
- 网关做 PIN 认证:手机浏览器首次打开网关地址需输入 PIN,通过后种下 httpOnly session cookie,之后的请求(含 WebSocket)只放行已认证的;
- 转发时把 Host / Origin / sec-fetch-site 重写为 DSH 后端(loopback 同源),使 DSH 的浏览器信任围栏放行 /api 与 SSE/WebSocket 传输;
展开完整文档(README 剩余 1 节)
dsh-mobile-access
DeepSeek Harness 移动访问插件:同一局域网内,手机扫码后用自己的浏览器访问电脑上的 DSH。
这是参考 dsh-mobile 安全网关思路的自研版本,功能聚焦在「局域网 + 手机浏览器访问」,去掉了远程通道(Tailscale/cpolar/FRP)与 Android App 部分,代码完全可见、可控。
它做了什么、为什么安全
DSH 官方禁止 --host 0.0.0.0(会把远程代码执行暴露到网络)。因此本插件不修改 DSH 的 web server,DSH Web 始终留在 127.0.0.1 上。插件在 DSH 进程内另起一个:
- 独立的 HTTPS 网关(自签名证书),监听 0.0.0.0:<port>;
- 把请求反向代理到 127.0.0.1:<DSH webServer 端口>;
- 网关做 PIN 认证:手机浏览器首次打开网关地址需输入 PIN,通过后种下 httpOnly session cookie,之后的请求(含 WebSocket)只放行已认证的;
- 转发时把 Host / Origin / sec-fetch-site 重写为 DSH 后端(loopback 同源),使 DSH 的浏览器信任围栏放行 /api 与 SSE/WebSocket 传输;
- 桥接 DSH ≥ 0.1.5 的浏览器会话认证:DSH 现在要求浏览器先完成「进程启动 token → 签名 cookie」握手,否则 / 与 /api 一律 401(正文 dsh web authentication required)。启动 token 只存在于 DSH 进程内,手机无从获得,因此网关在服务端代做这一步:用 connection.authenticatedUrl() 取本进程 token,GET /?token=… 换取 dsh-auth-<authority> cookie 并缓存,之后所有转发(含 WebSocket 升级)注入该 cookie。手机侧零感知,token 也不会落到手机上;会话失效(DSH 重启换端口 / cookie 过期)时网关收到 401 会清缓存、重新换取并重放一次。
默认不开启,需要你在设置里手动「开启局域网访问」;上次开启过的话,DSH 重启后会自动恢复。
0.2.0 变更:新增上述 DSH 会话认证桥接(修复升级到 0.1.5-rc.1 后手机端「需要重新进行 DSH web 认证」);网关 PIN 会话 token 改成持久化,DSH 重启后手机不必重新输 PIN;未认证的并发请求只换取一次会话 cookie。
⚠️ 安全边界:开启后网关对外监听,仅靠 PIN 认证防护。请只在受信任的家庭 / 办公局域网使用,并设置足够强的 PIN。这不是公网安全的替代。
依赖
| 依赖 | 用途 |
| selfsigned | 生成本地 HTTPS 自签名证书 |
| qrcode | 生成访问地址二维码 |
| http-proxy | 反向代理(HTTP / SSE / WebSocket 透传) |
安装
从 GitHub 安装(推荐)
dsh plugin --profile <profile> add github:MacilyDots/dsh-mobile-access
或从本地克隆的目录安装
dsh plugin --profile <profile> add file:<本仓库的绝对路径>
dsh --profile <profile>
dsh plugin add 会执行 pnpm add 并把声明了 dsh.bundle 的插件自动加入 profile 的 bundles 层;安装后需重启 DSH 才会加载插件。
使用
1. 重启 DSH 后,打开 DSH 设置页 → 移动访问。
2. 输入一个至少 4 位的访问 PIN,点开启局域网访问(端口默认 3443,可改)。
3. 面板会显示访问地址(https://<电脑局域网IP>:<端口>)和二维码。
4. 让手机连同一个局域网,用手机浏览器扫码(或手动输入地址)。
5. 首次打开:手机浏览器会提示信任自签名证书(确认即可),然后输入刚才的 PIN 进入,即可在手机上操作 DSH。
6. 用完点关闭移动访问。
升级到 DSH ≥ 0.1.5 后,手机端若显示「需要重新进行 DSH web 认证」(HTTP 401 正文 dsh web authentication required),说明网关缺少 DSH 会话 cookie 桥接——0.2.0 起已在网关内解决,无需在手机上做任何额外认证。
手机浏览器的「证书未信任」提示是正常的(自签名证书);不同浏览器“继续访问”的入口位置略有不同(如 iOS 需「显示详细信息 → 访问此网站」)。
自签证书的说明
首次开启时插件会生成自签名证书并缓存在 $DSH_HOME/mobile-access/cert.pem 与 key.pem。之后手机浏览器会记住你的信任。证书是 2048 位 RSA、400 天有效期。
文件
- index.js — 服务端:cordis 插件 + HTTPS 网关 + PIN 认证 + 反向代理 + 控制路由、二维码。
- client.js — 设置面板「移动访问」卡片。
- cordis.patch.yml — bundle 注入。
- test/ — 离线回归测试:自己起假 DSH 后端,状态目录指向系统临时目录,不碰真实的 PIN 与证书。
- 运行态状态与证书:$DSH_HOME/mobile-access/。
测试
三个测试都是自包含的,不需要 DSH 在运行、不需要真实网关:
node test/bridge.test.mjs # 会话认证桥接:换取 cookie / 401 自愈 / 并发 single-flight
node test/integration.test.mjs # 端到端:设 PIN → 开启 → 手机用 PIN 登录 → 反向代理
node test/websocket.test.mjs # WebSocket 升级透传(sec-websocket-key 保留)
bridge.test.mjs 是 0.2.0 会话认证桥接的回归测试(12 个断言),改动网关逻辑后先跑它。
控制路由
挂在 DSH 自己的 web server 上(loopback,仅本机浏览器可访问):
- GET /dsh-mobile-access/status — 状态(含二维码 dataURL)
- POST /dsh-mobile-access/enable — { pin, port? }
- POST /dsh-mobile-access/disable
- POST /dsh-mobile-access/pin — { pin }
限制
- 仅支持 IPv4 局域网地址。
- 换网络后需重新开启(或重启 DSH 后再次开启)。
- 未实现 dsh-mobile 的设备配对、公网/远程通道与 App 端。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
MacilyDots/dsh-mobile-access
扫码用手机浏览器安全访问电脑上的 DSH 界面
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,798已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,327已汉化DSH
71.5
终端编码代理esengine/DeepSeek-Reasonix
· 指南 · ACP · 扩展开发 · 规格 · 官方网站 · Discord · QQ
★ 36,021已汉化DSH
71.2
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 150,724已汉化DSH
71.1