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

远程访问 AercherC/dsh-remote

DeepSeek Harnessv0.2.2
AercherC14 天前有提交已提供中文文档扫描:含敏感能力

让 DeepSeek Harness 随时随地都能用 📱 手机一连就能远程访问 DSH Web/Desktop

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

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

自动兼容检查未通过:仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add AercherC/dsh-remote
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · desktop
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成

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

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

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

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

✓npm 包dsh-remote-web-gateway @ 0.2.2
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 08:37:14

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 29 处,展示前 29 条)
  • 读取本地文件
    src/cloudflared-archive.ts:45
    pipeline(createReadStream(tgzPath), createGunzip(), collector)
  • 写入本地文件
    src/cloudflared-archive.ts:126
    await writeFile(temporary, data, { mode: 0o755 })
  • 写入本地文件
    src/cloudflared-archive.ts:127
    await rename(temporary, destPath)
  • 写入本地文件
    src/cloudflared-archive.ts:129
    await chmod(destPath, 0o755).catch(() => { })
  • 读取本地文件
    src/device-session.ts:204
    devices = validateState(await readFile(options.file, 'utf8'), options.file)
  • 写入本地文件
    src/device-session.ts:224
    await mkdir(dirname(options.file), { recursive: true })
  • 写入本地文件
    src/device-session.ts:230
    await writeFile(temporary, payload, { encoding: 'utf8', mode: 0o600, flag: 'wx' })
  • 写入本地文件
    src/device-session.ts:232
    try { await rename(temporary, options.file) }
  • 删除本地文件
    src/device-session.ts:233
    finally { await rm(temporary, { force: true }) }
  • 读取本地文件
    src/pairing-long.ts:160
    const raw = await readFile(options.file, 'utf8')
  • 写入本地文件
    src/pairing-long.ts:187
    await mkdir(dirname(options.file), { recursive: true })
  • 写入本地文件
    src/pairing-long.ts:189
    await writeFile(temporary, `${JSON.stringify(next, null, 2)}\n`, 'utf8')
  • 写入本地文件
    src/pairing-long.ts:190
    await rename(temporary, options.file)
  • 执行外部命令来自配置/变量
    src/proxy-resolver.ts:174
    execFile(command, [...args], { encoding: 'utf8', timeout: 5_000, windowsHide: true }, (error, stdout) => {
  • 读取本地文件
    src/quick-tunnel.ts:371
    await access(candidate)
  • 执行外部命令来自配置/变量
    src/quick-tunnel.ts:386
    execFile(command, args, (error) => {
  • 执行外部命令来自配置/变量
    src/quick-tunnel.ts:395
    execFile(command, args, { encoding: 'utf8' }, (error, stdout) => {
  • 读取本地文件
    src/quick-tunnel.ts:470
    await access(path)
  • 读取本地文件
    src/quick-tunnel.ts:524
    const size = (await stat(binaryPath)).size
  • 读取本地文件
    src/quick-tunnel.ts:570
    const size = (await stat(path)).size
  • 写入本地文件
    src/quick-tunnel.ts:841
    await mkdir(attempt.cacheDir, { recursive: true })
  • 发起网络请求
    src/quick-tunnel.ts:889
    response = await fetch(attempt.source.url)
  • 发起网络请求
    src/quick-tunnel.ts:893
    agent = new ProxyAgent(attempt.path.url)
  • 发起网络请求
    src/quick-tunnel.ts:899
    response = await fetch(attempt.source.url, { dispatcher: agent } as unknown as RequestInit)
  • 删除本地文件
    src/quick-tunnel.ts:1043
    await rm(attempt.dest, { force: true }).catch(() => {})
  • 写入本地文件
    src/quick-tunnel.ts:1055
    await rename(temporary, attempt.dest)
  • 删除本地文件
    src/quick-tunnel.ts:1088
    await rm(temporary, { force: true, maxRetries: 5, retryDelay: 100 })
  • 执行外部命令来自配置/变量
    src/quick-tunnel.ts:1126
    const spawnFn = options.spawn ?? ((bin: string, args: string[]) => nodeSpawn(bin, args, {
  • 删除本地文件
    src/quick-tunnel.ts:1262
    await rm(cached, { force: true })
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 手机浏览器远程访问
  • 操作电脑端DSH

README

由 DeepSeek 最新模型翻译生成
DSH Remote 前往 Android 下载页 Android 下载页 · English 用手机或平板浏览器,安全地远程使用电脑上正在运行的 DeepSeek Harness(DSH)。 dsh-remote 在电脑本机运行 Remote Gateway,并通过 Cloudflare Quick Tunnel 建立公网 HTTPS 入口。手机完成配对后,就能用浏览器或 Android App 继续访问 DSH Web UI、查看 Agent 执行状态、继续对话、处理确认操作、选择工作区。 项目、会话、工具、文件和 Agent 仍然跑在电脑端,移动设备只负责远程访问。 一键安装 把下面整段复制给 DSH 的对话,让它替你装好(无需 clone、无需 pnpm、无需自己构建): 帮我安装这个 DSH 插件: https://github.com/AercherC/dsh-remote/releases/download/v0.3.1/dsh-remote-phone-0.3.1.tgz 安装完成后,完全退出并重新打开 DSH(本次涉及 Host 侧代码,仅刷新页面不够),然后进入: 设置 → 远程控制 开启远程控制,等待 Quick Tunnel 建立后,即可用手机扫码或输入配对码连接。
展开完整文档(README 剩余 1 节)
DSH Remote

前往 Android 下载页

Android 下载页 · English

用手机或平板浏览器,安全地远程使用电脑上正在运行的 DeepSeek Harness(DSH)。

dsh-remote 在电脑本机运行 Remote Gateway,并通过 Cloudflare Quick Tunnel 建立公网 HTTPS 入口。手机完成配对后,就能用浏览器或 Android App 继续访问 DSH Web UI、查看 Agent 执行状态、继续对话、处理确认操作、选择工作区。

项目、会话、工具、文件和 Agent 仍然跑在电脑端,移动设备只负责远程访问。

一键安装

把下面整段复制给 DSH 的对话,让它替你装好(无需 clone、无需 pnpm、无需自己构建):

帮我安装这个 DSH 插件: https://github.com/AercherC/dsh-remote/releases/download/v0.3.1/dsh-remote-phone-0.3.1.tgz

安装完成后,完全退出并重新打开 DSH(本次涉及 Host 侧代码,仅刷新页面不够),然后进入:

设置 → 远程控制

开启远程控制,等待 Quick Tunnel 建立后,即可用手机扫码或输入配对码连接。

主要功能

🤖 Android App

- 前往 Android 下载页,查看版本与安装要求后下载(Android 8.0+)。
- 打开 App 扫描电脑端二维码,即可在独立 WebView 中连接 DSH。
- App 与浏览器使用同一套配对、Device Session 和网关安全边界。

📱 手机 / 平板远程访问

- 可直接使用浏览器,也可安装 DSH Remote Android App。
- 使用 Cloudflare Quick Tunnel 建立公网 HTTPS 连接。
- 不需要公网 IP、端口转发或额外 VPS。
- Remote Gateway 仅监听本机回环地址,公网请求必须先经过认证。

🔐 一次性配对

- 开启远程控制后生成二维码和 8 位配对码。
- 配对票据默认 5 分钟有效。
- 支持扫码或手动输入配对码。
- 配对成功后票据立即失效。
- 可随时生成新的配对码,旧票据同时失效。

🔢 长期配对码

适合自己的常用手机或平板长期使用。

- 与一次性配对并存,可在设置页中切换。
- 支持二维码和手动输入。
- 长期码在手动更换前持续有效,并可在 DSH 重启后继续使用。
- 默认生成 9 位随机码。
- 支持自定义 6–12 位字母 / 数字组合(A-Z、0-9)。
- 可一键更换长期码,旧码和旧二维码立即失效。
- 更换长期码只影响之后的新配对,不会自动断开已经授权的设备。

💻 独立设备授权

- 每台已配对设备拥有独立 Device Session。
- 可以查看已授权设备。
- 支持单独撤销某台设备。
- 支持一次撤销全部设备。
- 获取公网地址本身不代表拥有访问权限,设备仍需先完成配对。

🗂️ 远程工作区选择

- 手机端可以浏览电脑目录并选择 DSH 工作区。
- Windows 下支持浏览不同磁盘根目录。
- 实际文件访问权限仍由本机操作系统权限控制。

📡 Quick Tunnel 状态与自动恢复

- 显示下载、校验、启动、连接、就绪等状态。
- 只有 Cloudflare Edge 真正确认连接后才显示可用远程地址和配对信息。
- 持续监测 Tunnel Edge 连接状态。
- 短暂网络抖动时保持当前公网地址和设备授权,并等待 cloudflared 自动恢复。
- 可查看最近的失联 / 恢复事件和持续时间。
- 如果 cloudflared 进程真正退出,则关闭当前公网入口并提示重新开启。

🌐 cloudflared 下载与网络适配

项目可以自动准备 Quick Tunnel 所需的 cloudflared:

- 检查本机已有 cloudflared 是否可信、可用。
- 使用固定版本和 SHA-256 校验下载文件。
- Windows 下额外检查 Authenticode 签名。
- 缓存文件损坏时自动重新下载。
- 显示下载大小、速度、来源和当前网络路径。
- 支持官方源和备用镜像。
- 支持自动、直连、自定义代理三种下载网络模式。

🔄 更新管理

- 设置页提供版本检查和更新状态。
- 更新通过 DSH 官方 dsh plugin 命令执行。
- 安装完成后重新校验实际安装版本。
- 不会自动重启正在工作的 DSH,更新完成后由用户手动重启生效。

🪟 DSH Desktop 安装

- 支持直接在 DSH Desktop 中让 DSH 协助完成插件安装。
- 不需要退出 Desktop,也不需要另外打开终端手动执行安装脚本。
- 只需在 DSH 对话中发送安装请求并附上本仓库地址,即可让 DSH 完成安装流程。
- 安装完成后可直接进入 设置 → 远程控制 开启远程访问。

工作原理

手机 / 平板浏览器 │ │ HTTPS ▼ Cloudflare Quick Tunnel │ ▼ Remote Gateway(127.0.0.1) │ ├─ 一次性配对 ├─ 长期配对码 ├─ Device Session └─ 请求认证 / 反向代理 │ ▼ DeepSeek Harness

项目 / 会话 / Agent / 工具 / 文件仍保留在电脑端

Quick Tunnel 负责把公网 HTTPS 流量送回电脑,Remote Gateway 负责认证访问者并把通过认证的请求代理到本机 DSH。

cloudflared 的目标始终是 Remote Gateway,而不是直接暴露 DSH,因此公网请求不能绕过配对和设备会话认证直接进入 DSH。

快速开始

dsh-remote 以 DSH 插件形式使用。安装完成后,在 DSH 中进入:

设置 → 远程控制开启远程控制,等待 Quick Tunnel 就绪,然后用手机或平板扫码,或输入配对码连接。

DSH Web

使用 dsh web 时,可以直接把插件安装到 web 配置档:

dsh plugin --profile web add "github:AercherC/dsh-remote#main&path:/plugin"

安装完成后重启 dsh web,然后进入:

设置 → 远程控制

开启远程控制即可。

DSH Desktop

这个插件支持直接让 DSH 协助安装,不用退出 Desktop,也不用另外打开终端。

在 DSH Desktop 的对话中直接发送:

帮我安装这个 DSH 插件: https://github.com/AercherC/dsh-remote

DSH 会按仓库中的插件配置完成安装。安装完成后进入:

设置 → 远程控制

开启远程控制,然后用手机扫码或输入配对码即可连接。

使用方式

一次性连接

1. 在电脑端打开 DSH 的「远程控制」。
2. 开启远程控制,等待 Tunnel 就绪。
3. 用手机扫描二维码,或手动输入 8 位配对码。
4. 配对成功后进入 DSH Web UI。
5. 之后该设备通过自己的 Device Session 继续访问。

长期连接

1. 在「远程控制」中切换到「长期配对码」。
2. 生成长期码和二维码。
3. 用常用手机扫码或输入长期码。
4. 如需废止该凭据,点击「换一组新码」或设置新的自定义码。

撤销设备

不再使用某台设备时,可以在电脑端设备列表中单独撤销;需要让所有已授权设备立即失效时,可以使用「撤销全部设备」。

安全设计

- Remote Gateway 仅监听 127.0.0.1。
- cloudflared 只主动建立出站连接,不要求本机开放公网端口。
- 公网 URL 只是传输入口,不是访问凭据。
- 一次性票据有有效期,成功使用后立即失效。
- 长期配对码在用户主动更换前持续有效。
- 每台设备拥有独立会话,可以单独撤销。
- 开启 / 停止远程访问、设备撤销、网络设置等管理操作只通过本机管理通道执行。
- 配对 claim 使用限速保护,凭据比较使用 timing-safe 方式处理。
- 二维码中的敏感配对 secret 放在 URL Fragment 中,不通过 query 参数传输。
- Tunnel 进程退出时立即清除当前公网入口。
- 自动下载的 cloudflared 使用固定版本和 SHA-256 校验;Windows 下额外验证 Authenticode 签名。

为了支持重启后继续显示长期配对码和二维码,长期凭据会保存在插件状态目录中。Windows 下该目录限制为当前用户和 SYSTEM 可访问;更换长期码时使用原子覆盖,不保留旧码历史。

长期码属于长期有效凭据,请不要分享包含长期二维码或配对码的截图。

License

MIT License。详见 LICENSE。

第三方组件及相关许可信息见 plugin/NOTICE。
预览分享卡片长什么样 ↓AercherC/dsh-remote
分享 · DeepSeek Harness Hub
AercherC/dsh-remote

让 DeepSeek Harness 随时随地都能用 📱 手机一连就能远程访问 DSH Web/Desktop

回到顶部