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

扫码远程隧道 Raiyan007-gb/dsh-remote-tunnel-easy

DeepSeek Harnessv1.4.2
Raiyan007-gb61 天前有提交已提供中文文档扫描:含敏感能力

扫二维码在手机上打开当前会话的网页界面

29.2/100
综合分
1
GitHub 星标
199
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-remote-tunnel-easy
npm 源 · dsh-remote-tunnel-easy 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/10/26·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 61 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

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

✓npm 包dsh-remote-tunnel-easy @ 1.4.2
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/23 01:17:52

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

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 34 处,展示前 31 条)
  • 发起网络请求
    index.js:676
    const upstream = http.request({ host: target.hostname, port: target.port, path: req.url, method: req.method, headers: req.headers, setHost: false }, (
  • 发起网络请求
    index.js:692
    const upstream = http.request({
  • 发起网络请求
    lib/client.js:128
    const response = await fetch(`${BRIDGE_PREFIX}/describe`, {
  • 发起网络请求
    lib/client.js:137
    const response = await fetch(`${BRIDGE_PREFIX}/mutate`, {
  • 发起网络请求
    lib/client.js:146
    const response = await fetch(`${BRIDGE_PREFIX}/status`, {
  • 发起网络请求
    lib/client.js:155
    const response = await fetch(`${BRIDGE_PREFIX}/regenerate`, {
  • 发起网络请求
    lib/client.js:164
    const response = await fetch(`${BRIDGE_PREFIX}/update-status`, {
  • 发起网络请求
    lib/client.js:173
    const response = await fetch(`${BRIDGE_PREFIX}/check-update`, {
  • 写入剪贴板
    lib/client.js:369
    await navigator.clipboard.writeText(tunnelStatus.accessUrl);
  • 执行外部命令固定命令
    lib/cloudflared.js:78
    execFile('cloudflared', ['--version'], { windowsHide: true, timeout: 8000 }, (error) => {
  • 读取本地文件
    lib/cloudflared.js:89
    const stream = createReadStream(path)
  • 发起网络请求
    lib/cloudflared.js:98
    return fetch(url).then(async (response) => {
  • 写入本地文件
    lib/cloudflared.js:101
    const sink = createWriteStream(dest)
  • 执行外部命令固定命令
    lib/cloudflared.js:112
    execFile('/usr/bin/tar', ['-xzf', tgzPath, '-C', destDir], (error) => {
  • 读取本地文件
    lib/cloudflared.js:154
    if (existsSync(finalPath)) return { path: finalPath, kind: 'downloaded' }
  • 写入本地文件
    lib/cloudflared.js:157
    mkdirSync(dir, { recursive: true })
  • 写入本地文件
    lib/cloudflared.js:177
    mkdirSync(extractDir, { recursive: true })
  • 读取本地文件
    lib/cloudflared.js:180
    if (!existsSync(extracted)) throw new Error('cloudflared archive contained no cloudflared binary')
  • 写入本地文件
    lib/cloudflared.js:181
    chmodSync(extracted, 0o700)
  • 写入本地文件
    lib/cloudflared.js:182
    renameSync(extracted, tmpBin)
  • 删除本地文件递归
    lib/cloudflared.js:183
    rmSync(extractDir, { recursive: true, force: true })
  • 写入本地文件
    lib/cloudflared.js:186
    chmodSync(tmpAsset, 0o700)
  • 删除本地文件
    lib/cloudflared.js:193
    rmSync(tmpAsset, { force: true })
  • 删除本地文件
    lib/cloudflared.js:194
    rmSync(tmpBin, { force: true })
  • 读取本地文件
    lib/update.js:44
    const manifest = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'))
  • 读取本地文件
    lib/update.js:104
    entries = readdirSync(join(dshHome(), PROFILES_DIR), { withFileTypes: true })
  • 读取本地文件
    lib/update.js:132
    const manifest = JSON.parse(readFileSync(join(profileDir, 'package.json'), 'utf8'))
  • 读取本地文件
    lib/update.js:158
    const manifest = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'))
  • 发起网络请求
    lib/update.js:202
    const response = await fetch(`${registryBase}/${name}/latest`, {
  • 执行外部命令固定命令
    lib/update.js:225
    const child = spawn('pnpm', ['add', effectiveSpec], {
  • 执行外部命令固定命令
    lib/update.js:261
    const child = spawn('pnpm', ['remove', OLD_PACKAGE_NAME], {
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-settings
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 扫码手机打开网页界面
  • 同一会话同步
  • 跨平台支持

DSH 插件包:扫二维码就能在手机上打开 deepseek-harness 网页界面,还是同一个会话——cloudflared 快速隧道,不用数据库,支持 Windows/macOS/Linux

v1.4.22026-08-30
· 变更内容 · 迁移系统:老安装(qrcode-hassle-free@1.3.x)检查更新时现在指向 dsh-remote-tunnel-easy——卡片显示「已改名为 dsh-remote-tunnel-easy」和「迁移」按钮,点一下 pnpm 装上新的包、卸掉旧的,然后重启 dsh web · README:注明旧名 qrcode-hassle-free -> dsh-remote-tunnel-easy · 所有更新路径(locateProfileDir、fetchLatest、pnpm add)现在都通过 package.json 识别包名
v1.4.12026-08-30
Add citation (BibTeX) for dsh-remote-tunnel-easy at end of README — bump to 1.4.1
原文(未汉化)
v1.4.02026-08-30
BREAKING rename to dsh-remote-tunnel-easy. Install: dsh plugin --profile web add dsh-remote-tunnel-easy
原文(未汉化)
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-remote-tunnel-easy 在手机上打开你的 DeepSeek Harness 会话——只需用摄像头对准它。 扫描 设置 → 插件 中的二维码,harness 便会在你手机的浏览器中打开,就在你当前正在使用的会话里。相同的工作区,相同的聊天。无需输入 URL。 dsh web 终端不会打印任何内容。 License: MIT GitHub Stars Release npm ⚠️ 已从 qrcode-hassle-free 更名 —— 原为 Raiyan007-gb/dsh-qrcode-hassle-free(npm qrcode-hassle-free)。现为 dsh-remote-tunnel-easy(Raiyan007-gb/dsh-remote-tunnel-easy,npm dsh-remote-tunnel-easy@1.4.2)。如果你安装的是旧名称,请先迁移——移除旧 bundle,然后添加新的。 一个单命令的 DeepSeek Harness web bundle,将基于二维码的远程交接带到设置页面。它会启动一个 cloudflared 快速隧道,将你的手机接入桌面正在使用的确切会话,并把二维码和设置直接绘制在你的其他插件旁边——没有终端噪音,没有数据库,没有 Firebase,无需安装应用。
展开完整文档(README 剩余 1 节)
dsh-remote-tunnel-easy

在手机上打开你的 DeepSeek Harness 会话——只需用摄像头对准它。

扫描 设置 → 插件 中的二维码,harness 便会在你手机的浏览器中打开,就在你当前正在使用的会话里。相同的工作区,相同的聊天。无需输入 URL。
dsh web 终端不会打印任何内容。

License: MIT
GitHub Stars
Release
npm

⚠️ 已从 qrcode-hassle-free 更名 —— 原为 Raiyan007-gb/dsh-qrcode-hassle-free(npm qrcode-hassle-free)。现为 dsh-remote-tunnel-easy(Raiyan007-gb/dsh-remote-tunnel-easy,npm dsh-remote-tunnel-easy@1.4.2)。如果你安装的是旧名称,请先迁移——移除旧 bundle,然后添加新的。

一个单命令的 DeepSeek Harness web bundle,将基于二维码的远程交接带到设置页面。它会启动一个 cloudflared 快速隧道,将你的手机接入桌面正在使用的确切会话,并把二维码和设置直接绘制在你的其他插件旁边——没有终端噪音,没有数据库,没有 Firebase,无需安装应用。

- 扫码即开 —— 设置 → 插件 中有一个真正的二维码,每次运行都会刷新
- 同一会话 —— 手机进入的正是你当前所在的聊天和工作区
- 自动安装 —— 检测 cloudflared,缺失时自动下载(经 SHA-256 校验)
- 重新生成 —— 一键为同一会话生成新的隧道 URL,无需重启
- 可编辑设置 —— 可在页面中设置隧道目标、cloudflared 路径和会话交接
- 不存储任何内容 —— 隧道 URL 每次运行都是随机的;不会保存到任何地方
- 全平台支持 —— Windows(x64/x86)、macOS(Intel/Apple Silicon)和 Linux(x64/arm64)

一览

| 问题 | 回答 |
| 它是什么? | 一个 dsh bundle,在设置页面中显示可扫描的二维码和访问链接,让手机能在活动会话中打开 harness。 |
| 它适合谁? | 任何运行 dsh web 并希望手机接入同一会话、无需输入隧道 URL 和令牌的人。 |
| 我能得到什么? | 一个回环边缘代理、一个 cloudflared 快速隧道、同一会话交接,以及 设置 → 插件 中的实时二维码 + 设置卡片。 |
| 它能在什么上运行? | Windows、macOS 和 Linux —— 任何能运行 dsh 的平台。 |
| 是否需要云服务? | 无需账户或注册。使用 cloudflared,首次运行时若缺失会自动下载;隧道是公开的,链接中的令牌就是访问凭证。 |

快速开始

运行一次 dsh web,以便存在一个配置文件——这是唯一的前提条件。
cloudflared 不再需要你手动安装:首次启动隧道时,该捆绑包会探测你的 PATH,当找不到 cloudflared 时,它会下载官方固定版本的二进制文件(经 SHA-256 校验),缓存到你的用户缓存目录中,并在之后复用。想使用自己的安装?把它放到 PATH 上,或在卡片中将 cloudflared 路径 字段设置为绝对路径——显式路径会同时禁用探测和下载。

最简单的方式——使用插件名称从 npm 注册表安装:

dsh plugin --profile web add dsh-remote-tunnel-easy@latest --config.minimumReleaseAge=0

--config.minimumReleaseAge=0 标志会绕过 pnpm 约 24 小时的发布时长限制,因此新发布的版本会立即安装。如果不加该标志,直接运行 dsh plugin --profile web add dsh-remote-tunnel-easy 仍然可行,但可能会等到新鲜度窗口过去之后才安装。

或者,如果你愿意,也可以直接从 GitHub 仓库 URL 安装:

dsh plugin --profile web add https://github.com/Raiyan007-gb/dsh-remote-tunnel-easy

如果想使用本地检出,请克隆它并添加该文件夹:

git clone https://github.com/Raiyan007-gb/dsh-remote-tunnel-easy
dsh plugin --profile web add \./dsh-remote-tunnel-easy

这些命令会在需要时初始化配置文件、链接该包并注册该捆绑包。无需构建步骤——该包以纯 ESM 形式发布,零运行时依赖(QR 编码器和 cloudflared 解析器均内置于代码树中),因此 add 和 remove 保持快速,且从不运行安装脚本。

安全提示: 从 git URL 安装会请求运行该包安装脚本的权限。此包没有任何安装脚本(纯 ESM,无 postinstall),但请固定一个提交——在 URL 上加上 #——以冻结所运行的内容。若要完全跳过安装权限,请用 pnpm pack 打包成 tarball,然后运行
dsh plugin --profile web add ./dsh-remote-tunnel-easy-1.1.0.tgz。

然后重启 dsh web——每次启动时,二维码和设置都会出现在 Settings → Plugins → DSH Remote 中。

它的作用

每次 dsh web 启动时,该捆绑包会:

1. 启动一个回环边缘代理(127.0.0.1,临时端口),将每个请求和 WebSocket 升级转发到 harness,并将 Host 和 Origin 重写为回环权威。这正是让 harness 的 /api 浏览器信任围栏接受隧道流量的原因——该围栏要求 Origin == Host,而手机的 Origin 是隧道主机名,仅靠 --http-host-header 重写永远无法满足。没有该代理,应用可以加载,但每次 API 调用都会返回 403。
2. 定位 cloudflared——优先使用配置的 cloudflared 路径 覆盖值,否则使用 PATH 上的二进制文件,否则使用经 SHA-256 校验的固定下载版本(2026.8.2),并缓存在用户缓存目录下。然后它会启动 cloudflared tunnel --no-autoupdate --url http://127.0.0.1: 指向该代理。
3. 等待 cloudflared 打印出随机的 https://.trycloudflare.com URL。
4. 通过 harness 连接服务(authenticatedUrl —— 与控制台行打印的同一个 mint)解析此进程的启动令牌。
5. 将最近活跃的会话 id 注入到每个提供的索引页面中(通过 webserver 的 index-injection 表),限定为非回环来源且每个标签页一次 —— 这样任何隧道入口都会落在桌面端正在工作的会话内。该 id 在渲染时于 Host 上解析(缓存,每 15 秒刷新一次);手机端不会为种子本身发起任何 /api 调用。
6. 注册一个受令牌门控的 /remote-handoff 路由作为回退入口路径:相同的种子注入,然后是正常的令牌→cookie 登录(SHA-256 常量时间比较)。
前缀匹配,因此 /remote-handoff 和 /remote-handoff/ 均可正常工作。
7. 注册一个 remote-handoff 设置命名空间和一个仅限回环的桥接(/api/dsh-remote-handoff-settings)。Settings → Plugins → DSH Remote 中的卡片从该桥接读取隧道状态(QR 矩阵 + 访问链接)并将其绘制在页面中,同时还有可编辑的 tunnelTarget / cloudflaredPath / sessionHandoff 设置。
Regenerate 按钮会在同一会话上就地重启隧道以获取全新的 URL,而空的 tunnel target 会自动填充 harness 自身的回环地址。dsh web 终端不打印任何内容。

要求

- 无需手动安装 cloudflared —— 缺失时会自动下载(Windows x64/x86、macOS Intel/Apple Silicon、Linux x64/arm64);任何其他平台需要在 PATH 上有 cloudflared,或显式指定 cloudflared path。
- 首次运行时需要网络访问(以访问 GitHub 下载二进制文件)
- Node —— 在 dsh 运行的地方已经存在
- 手机在任何网络上 —— 隧道是公开的;URL 中的令牌是唯一的门禁,因此请像对待密码一样对待所显示的链接。

从 qrcode-hassle-free 迁移

此前该插件名为 qrcode-hassle-free(GitHub 上为 Raiyan007-gb/dsh-qrcode-hassle-free,npm 上为 qrcode-hassle-free)。现在它是 dsh-remote-tunnel-easy(Raiyan007-gb/dsh-remote-tunnel-easy,dsh-remote-tunnel-easy@1.4.2)。旧的 npm 包已取消发布。

如果你安装的是旧名称,请先移除它,然后添加新名称并重启 dsh web:

dsh plugin --profile web remove qrcode-hassle-free
dsh plugin --profile web add dsh-remote-tunnel-easy@latest --config.minimumReleaseAge=0

重启 dsh web —— QR 和设置现在会像之前一样出现在 Settings → Plugins → DSH Remote 下。

移除

dsh plugin --profile web remove dsh-remote-tunnel-easy

然后重启 dsh web。

许可证

MIT —— 使用它、修改它、发布它。参见 LICENSE。

引用如果您在研究或项目中使用了 dsh-remote-tunnel-easy,请引用:

@software{dsh_remote_tunnel_easy,
title = {dsh-remote-tunnel-easy: Hassle-free remote tunnel for DeepSeek Harness},
author = {Raiyan},
url = {https://github.com/Raiyan007-gb/dsh-remote-tunnel-easy},
year = {2026},
version = {1.4.2}
}

为 DeepSeek Harness 打造——扫描、打开、持续工作。
预览分享卡片长什么样 ↓Raiyan007-gb/dsh-remote-tunnel-easy
分享 · DeepSeek Harness Hub
Raiyan007-gb/dsh-remote-tunnel-easy

扫二维码在手机上打开当前会话的网页界面

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部