🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

内网扫码配对 MyRemme/dsh-lan-pair

DeepSeek Harness
MyRemme31 天前有提交已提供中文文档扫描:含敏感能力

扫码或令牌让手机接入同一份 Web 界面

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/1 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add MyRemme/dsh-lan-pair
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · ui
装得上吗
静态安装检查有提示项,装前建议看一眼 README
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 31 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-lan-pair(未发布到 npm,仅可源码安装)
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖要求 >=0.2.0-rc.1 <0.3.0-0 || >=0.3.0-rc.1 <0.4.0-0 || >=0.4.0-rc.1 <0.5.0-0 || >=0.5.0-rc.1 <0.6.0-0 · 最新 0.2.1-rc.2 兼容
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/20 04:29:27

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 16 处,展示前 16 条)
  • 读取本地文件
    lib/index.js:127
    const saved = JSON.parse(readFileSync(file, "utf8"));
  • 写入本地文件
    lib/index.js:169
    mkdirSync(dirname(file), { recursive: true });
  • 写入本地文件
    lib/index.js:173
    writeFileSync(temp, JSON.stringify(payload), { mode: 384 });
  • 写入本地文件
    lib/index.js:174
    renameSync(temp, file);
  • 删除本地文件
    lib/index.js:197
    else rmSync(file, { force: true });
  • 发起网络请求
    lib/index.js:2376
    const request = http.request(options, (response) => {
  • 执行外部命令来自配置/变量
    lib/index.js:2504
    const result = spawnSync(cmd, args, {
  • 读取本地文件
    lib/index.js:2744
    if (!existsSync(file)) return "";
  • 读取本地文件
    lib/index.js:2745
    return readFileSync(file, "utf8");
  • 读取本地文件
    lib/index.js:2891
    const mode = existsSync(file) ? statSync(file).mode & 511 : 384;
  • 读取本地文件
    lib/index.js:2891
    const mode = existsSync(file) ? statSync(file).mode & 511 : 384;
  • 写入本地文件
    lib/index.js:2892
    mkdirSync(dirname(file), { recursive: true });
  • 写入本地文件
    lib/index.js:2894
    writeFileSync(temp, content, { mode });
  • 写入本地文件
    lib/index.js:2895
    renameSync(temp, file);
  • 发起网络请求
    lib/index.js:3420
    const response = await fetch(`http://127.0.0.1:${String(ctx.webServer.port)}/`, withIdentityEncoding({ headers: cookie !== void 0 ? { cookie } : void
  • 读取本地文件
    lib/invariant.js:21
    return readFileSync(url, "utf8");
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 扫码或令牌配对
  • 手机接入同一Web界面
  • 局域网免密钥访问

仅限局域网内对 DSH 的远程访问:通过二维码或令牌配对手机或另一台 PC,以打开相同的 Web UI,并可选在局域网内实现免密钥访问。

README

由 DeepSeek 最新模型翻译生成
dsh-lan-pair 内网配对远程访问插件,用于 DSH(DeepSeek Harness):让手机或另一台电脑通过扫码 / 配对令牌接入同一份 DSH Web 界面,并且可以选择让内网设备无需密钥直接打开界面。 本插件由 @linxin666/dsh-remote-web-ui 0.4.4 改造而来,已彻底移除全部公网功能,只保留内网场景。 与上游的差异 上游提供公网访问能力(Cloudflare 隧道等)。本插件把这些全部删除,只做内网: | 已移除 | 说明 | | Cloudflare 快速隧道 / 命名隧道 | 含 cloudflared 依赖、tunnelToken、autoTunnel 配置 | | dsh-market 固定域名中继 | relay 注册与身份文件 | | publicBaseUrl 与公网状态帧 | 含面板上的公网地址单选与角标 | | 每日匿名遥测上报 | 上游会向 dsh-market.com 上报心跳,已改为惰性空函数 | 功能 - 二维码配对:本机面板签发配对链接,手机扫码即可接入 - 配对令牌:可直接复制令牌/链接,不依赖摄像头 - 设备会话管理:已授权设备列表、在线状态、单独吊销 - 内网免密钥访问(默认开启):同一内网的设备无需配对、无需令牌,直接打开 Web 界面,不再反复要求认证
展开完整文档(README 剩余 1 节)
dsh-lan-pair

内网配对远程访问插件,用于 DSH(DeepSeek Harness):让手机或另一台电脑通过扫码 / 配对令牌接入同一份 DSH Web 界面,并且可以选择让内网设备无需密钥直接打开界面。

本插件由 @linxin666/dsh-remote-web-ui 0.4.4 改造而来,已彻底移除全部公网功能,只保留内网场景。

与上游的差异

上游提供公网访问能力(Cloudflare 隧道等)。本插件把这些全部删除,只做内网:

| 已移除 | 说明 |
| Cloudflare 快速隧道 / 命名隧道 | 含 cloudflared 依赖、tunnelToken、autoTunnel 配置 |
| dsh-market 固定域名中继 | relay 注册与身份文件 |
| publicBaseUrl 与公网状态帧 | 含面板上的公网地址单选与角标 |
| 每日匿名遥测上报 | 上游会向 dsh-market.com 上报心跳,已改为惰性空函数 |

功能

- 二维码配对:本机面板签发配对链接,手机扫码即可接入
- 配对令牌:可直接复制令牌/链接,不依赖摄像头
- 设备会话管理:已授权设备列表、在线状态、单独吊销
- 内网免密钥访问(默认开启):同一内网的设备无需配对、无需令牌,直接打开 Web 界面,不再反复要求认证
- 局域网绑定:自动把 Web 服务绑定改写为 0.0.0.0,并维护主机防火墙放行规则

安装

本插件以「本地包」形式装入 DSH profile。以 desktop profile 为例:

1. 把本仓库放进 profile 的依赖目录:

/profiles//node_modules/dsh-lan-pair/

2. 在该 profile 的 package.json 中登记依赖与 bundle:

{
"dependencies": {
"dsh-lan-pair": "file:./node_modules/dsh-lan-pair"
},
"dsh": {
"profile": {
"bundles": [
// ... 其他 bundle "dsh-lan-pair" ] } } }

3. 重启 DSH。插件代码位于 node_modules 下,而 DSH 的热重载会忽略该目录,因此改动插件后必须重启才能生效。

配置

在 profile 的 cordis.patch.yml 中配置插件行:

- id: lan-pair
name: "dsh-lan-pair"
config:
lanBind: true # 把 Web 服务绑定改写为 0.0.0.0,并维护防火墙规则 allowLanWithoutKey: true # 内网设备无需配对/令牌直接打开界面 maxDevices: 4 # 已授权设备上限(默认 4,最大 64) idleExpireMs: 2592000000 # 设备空闲过期(毫秒),默认 30 天 requirePairingForLan: true # 默认 true,通常无需显式设置

也可以在 DSH 的设置卡片里图形化调整这些开关。

关于「内网免密钥」与「局域网访问要求配对」的关系

内网免密钥的实现依赖门控的 /remote 通道——只有它会把内网请求送到 harness,并附上进程自身的凭据。因此:

- allowLanWithoutKey: true 时,插件会强制保留该通道,与 requirePairingForLan 取值无关;
- 若两者都关,内网请求会走普通 /api,被 harness 的信任围栏挡为 403。

这一点在实现里已做兜底,不会出现「界面能打开、但所有 API 全废」的情况。

安全提醒

allowLanWithoutKey: true 意味着同一内网内的任何设备都能直接打开完整的 DSH Web 界面,其权限等同于该 DSH 实例本身的权限(若你的 profile 是 danger-full-access,则等同于完整控制权)。

在不可信网络(公共 WiFi、合租网络)中请关闭该开关,改为必须扫码配对。关闭后配对闸门立即恢复。

实现说明

- 本仓库发布的是构建产物(lib/*.js),不含 TypeScript 源码。产物为未压缩 ESM,保留了 //#region 标记与完整注释,可直接阅读与修改。
- 插件分两半:Host 半(Node ESM,lib/index.js)与 Client 半(浏览器 bundle,lib/client.js)。
- Host 半注册一条 exact / 路由以支持内网免密钥:内网来源直接获得注入好的应用外壳,其余来源原样交回 harness 的 fallback,因此桌面端行为完全不受影响。
- lib/invariant.js 是不变量伴生插件,需要 composition 挂载 @deepseek-ai/dsh-invariants 才会运行。DSH 桌面版默认的 dsh-base / dsh-web-app 两个 bundle 都不挂载该服务,因此这条检查在桌面版下不会执行;它只在自定义 composition(如 dsh-sdk-minimal)下生效。

与已安装副本的关系

本仓库是唯一权威来源。若你把插件装进 profile 的 node_modules 并由其他工具(如 dsh-purge)改写过该副本,副本会与仓库产生差异。差异只影响运行时,不影响本仓库;要回到权威状态,用本仓库覆盖副本后重启 DSH。仓库中的 lib/index.js 已经包含 stripManagedBlock 保留外来行的修复,不需要任何外部补丁再改一次。

防火墙当 lanBind: true 时,插件会通过 netsh(Windows)维护一条入站放行规则,规则名为 lan-pair (auto),参数为 dir=in action=allow protocol=TCP localport= profile=private,domain。状态可从 /api/pair/lan-bind 的 firewall 字段读取:

{ "ok": true, "managed": true, "note": "netsh" }

这一步需要管理员权限。 若 DSH 以普通权限运行,规则写入会失败,字段返回 ok: false,而 Windows 防火墙默认阻止未匹配的入站连接——此时同内网的其他设备打不开界面,但本机访问自己的局域网 IP 仍然正常,容易误判为「已经连通」。

要判断是否真的放行,应看 firewall.ok,而不是从本机访问自己的局域网 IP。修复方式是以管理员身份启动一次 DSH(插件会自动补上规则),或在管理员终端里手工执行:

netsh advfirewall firewall add rule name="lan-pair (auto)" dir=in action=allow protocol=TCP localport=19387 profile=private,domain

注意规则名必须与插件一致。若手工用了别的名字,插件检测不到,firewall.ok 会一直为 false。

许可证

Apache-2.0,见 LICENSE。

Copyright 2026 Hughes

本项目基于 @linxin666/dsh-remote-web-ui 0.4.4 改造,其原始许可证一并保留在 LICENSE 中。

LICENSE 末尾的 Copyright [yyyy] [name of copyright owner] 属于 Apache-2.0 的 APPENDIX 教学示例,按标准做法原样保留、不填写。
预览分享卡片长什么样 ↓MyRemme/dsh-lan-pair
分享 · DeepSeek Harness Hub
MyRemme/dsh-lan-pair

扫码或令牌让手机接入同一份 Web 界面

回到顶部