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

远程安全访问代理 IslandManSwevo/deepseek-harness-tailscale

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

经 Tailscale 从手机安全远程操控 Web UI

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add IslandManSwevo/deepseek-harness-tailscale
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 15 处,展示前 13 条)
  • 发起网络请求
    verify.js:27
    const req = http.request({
  • 读取本地文件
    web-files.js:143
    fs.statSync(ancestor);
  • 读取本地文件
    web-files.js:189
    const st = fs.statSync(p);
  • 读取本地文件
    web-files.js:207
    const st = fs.statSync(abs);
  • 读取本地文件
    web-files.js:210
    const buf = fs.readFileSync(abs);
  • 写入本地文件
    web-files.js:222
    fs.mkdirSync(path.dirname(abs), { recursive: true });
  • 读取本地文件
    web-files.js:225
    previous = fs.readFileSync(abs, 'utf8');
  • 写入本地文件
    web-files.js:239
    fs.writeFileSync(tmp, out, 'utf8');
  • 写入本地文件
    web-files.js:240
    fs.renameSync(tmp, abs);
  • 删除本地文件
    web-files.js:242
    try { fs.unlinkSync(tmp); } catch (_) { }
  • 读取本地文件
    web-files.js:252
    pageHtml = fs.readFileSync(path.join(__dirname, 'web-files-page.html'), 'utf8');
  • 发起网络请求
    web-proxy.js:75
    const upstreamReq = http.request({
  • 发起网络请求
    web-proxy.js:152
    const upstreamReq = http.request({
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 零配置启动器
  • 内置文件查看器

从任意设备通过 Tailscale 安全运行 DeepSeek Harness(dsh)Web UI——零配置启动器、兼容 WebSocket 的反向代理、内置文件查看器。

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness · 随时随地,通过 Tailscale 访问 在一台机器上运行 DeepSeek Harness(dsh)——通过私有 Tailscale 网络,从你的手机、平板和笔记本电脑安全地远程操控它。 零配置启动器 · WebSocket 安全反向代理 · 内置文件查看器 · 自动更新 · 可选 HTTPS 环境要求: Windows(PowerShell + Windows 防火墙)· Node.js ≥ 24 · 主机及所有连接设备上均安装 Tailscale。 为什么需要这个项目 dsh 拥有一个非常出色的 Web UI——但它拒绝绑定到 127.0.0.1 以外的地址,这是有意为之,因为它可以在你的机器上执行代码。开箱即用的情况下,你只能在运行它的同一台电脑的浏览器中使用它。 最朴素的解决方案——在它前面放一个反向代理——会以看似灾难性的方式失败: - 你刷新页面后,工作区和历史记录就"消失"了。 客户端只有在两个 WebSocket 连接建立后才会加载它们。一个损坏的代理会悄无声息地杀掉这些连接,于是 UI 就停留在"添加工作区 / 选择工作区",而你在一旁惊慌失措。 - 从手机创建工作区 → HTTP 403(原生文件夹选择器仅限回环地址)。
展开完整文档(README 剩余 1 节)
DeepSeek Harness · 随时随地,通过 Tailscale 访问

在一台机器上运行 DeepSeek Harness(dsh)——通过私有 Tailscale 网络,从你的手机、平板和笔记本电脑安全地远程操控它。

零配置启动器 · WebSocket 安全反向代理 · 内置文件查看器 · 自动更新 · 可选 HTTPS

环境要求: Windows(PowerShell + Windows 防火墙)· Node.js ≥ 24 · 主机及所有连接设备上均安装 Tailscale。

为什么需要这个项目

dsh 拥有一个非常出色的 Web UI——但它拒绝绑定到 127.0.0.1 以外的地址,这是有意为之,因为它可以在你的机器上执行代码。开箱即用的情况下,你只能在运行它的同一台电脑的浏览器中使用它。

最朴素的解决方案——在它前面放一个反向代理——会以看似灾难性的方式失败:

- 你刷新页面后,工作区和历史记录就"消失"了。 客户端只有在两个 WebSocket 连接建立后才会加载它们。一个损坏的代理会悄无声息地杀掉这些连接,于是 UI 就停留在"添加工作区 / 选择工作区",而你在一旁惊慌失措。
- 从手机创建工作区 → HTTP 403(原生文件夹选择器仅限回环地址)。
- 从手机打开生成的文件 → HTTP 403(host.openPath 仅限回环地址)。

本项目真正解决了以上全部三个问题。

它是什么

| 组件 | 作用 |
| start-harness.ps1 | 一条命令搞定。自动检测 Node.js、你的 dsh 安装位置以及你的 Tailscale 身份,然后在端口空闲时启动代理(如果端口空闲)并启动 dsh(如果端口空闲)。幂等——无需编辑配置文件。如果登录时 tailnet 仍在连接中,它会在后台持续轮询,并在 Tailscale 就绪后自动启动代理。 |
| web-proxy.js | 加固的 Node 反向代理:忠实转发 WebSocket 升级请求(/api/events.mux、/api/events.host),因此刷新后能恢复你的历史记录;规范化 Host/Origin,使 dsh 的浏览器信任围栏得以通过;注入在纯 HTTP 下所需的 crypto.randomUUID polyfill。 |
| web-files.js + web-files-page.html | 位于 /__files 的内置文件浏览器/查看器/编辑器——从手机点击生成的文件即可打开,而不会返回 403。 |
| check-updates.ps1 | 当有更新的 dsh 可用时发出通知(或自动更新,并备份 ~/.dsh)。 |
| 可选 HTTPS | 通过 tailscale serve + 免费的 Let's Encrypt 证书实现。Tailscale 原生——不向公共互联网暴露任何内容。 |

快速开始

1. 在主机上安装 Tailscale 并登录。在 Tailscale 管理控制台中启用 HTTPS 证书(DNS → HTTPS Certificates)。
2. 安装 harness:npm install -g @deepseek-ai/dsh(Node.js ≥ 24)。
3. 将本仓库的文件复制到一个文件夹中,例如 %USERPROFILE%\dsh\。
4. 将代理端口限制为仅 tailnet 可访问(如果你更改了 DSH_PROXY_PORT,请相应调整 -LocalPort):
New-NetFirewallRule -DisplayName 'DeepSeek Harness (Tailscale only)' -Direction Inbound -Action Allow -Protocol TCP -LocalPort 3080 -RemoteAddress 100.64.0.0/10, fd7a:115c:a1e0::/48

5. 启动它(幂等——可安全重复运行): powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\dsh\start-harness.ps1"

6. 可选 HTTPS:tailscale serve --bg http://127.0.0.1:3080
7. 从任意 Tailscale 设备访问:https://..ts.net

就这么简单。 启动器会自动从你的 Tailscale 身份中推导出受信任主机列表。关于登录时自动启动的计划任务、停止方法、所有配置选项以及深入故障排除,请参阅 完整部署指南。

别人都没搞对的部分

刷新 → 历史记录丢失不是数据问题——你的数据从未丢失(工作区和会话都存放在 ~/.dsh 中)。这是一个 WebSocket 问题:dsh 只有在 /api/events.mux 和 /api/events.host 连接之后才会拉取其工作区/会话基线。大多数代理能正常转发 HTTP,但会破坏 101 升级握手,因此 UI 看起来像是被清空了。本代理正是为解决这两个握手问题而构建的——并且部署指南中包含了能证明这一点的原始握手测试。

安全模型

- dsh 保持仅限回环;代理拥有面向 tailnet 的端口,是唯一的入口。
- Windows 防火墙规则仅允许来自 Tailscale CGNAT 范围(100.64.0.0/10、fd7a:115c:a1e0::/48)的流量访问代理端口——不会向公共互联网暴露任何内容。
- 每个请求都要通过浏览器信任围栏:仅限回环或受信任的 Tailscale 权威来源;跨站以及 Origin/Host 不匹配的请求会被拒绝。
- /__files 查看器仅支持读写(不执行代码),路径限制在 DSH_FILES_ROOT 内,并拒绝 ..、符号链接逃逸和空字节遍历。

提醒: 你 tailnet 上的任何设备都可以通过代理访问该 harness。这正是其设计目的——但请确保 tailnet 中只有你信任的人。dsh 没有登录功能;在共享 tailnet 上,请通过 Tailscale ACL 限制谁可以访问此节点的 :3080/:443,而不要仅依赖 tailnet 成员身份。

配置

每项设置都是可选的且会自动检测;可通过环境变量覆盖(DSH_NODE、DSH_DSH_BIN、DSH_TS_HOST、DSH_TS_IP、DSH_TS_WAIT_SECONDS、DSH_TS_RETRY_SECONDS、DSH_PROXY_PORT、DSH_WEB_PORT、DSH_UPDATE_TRACK、DSH_AUTO_UPDATE、DSH_FILES_ROOT)。如果登录时 Tailscale 仍在连接,启动器会轮询等待它(DSH_TS_WAIT_SECONDS,默认 60),然后启动后台重试(DSH_TS_RETRY_SECONDS,默认 600),以便在 tailnet 出现后自动启动代理。详情见部署指南。

故障排除一览
- 刷新后历史记录“消失” → WebSocket 代理问题;运行 start-harness.ps1 -Verify(一次性健康检查)或指南中的原始握手测试。
- 手机上 UI 正常但没有历史记录,而 PC 上正常 → dsh 运行时缺少其 --trusted-host 列表(它在 Tailscale 就绪之前就启动了)。重新运行 start-harness.ps1(它现在会自我修复此问题),并用 -Verify 确认。
- 从手机创建工作区时出现 HTTP 403 → 启动器设置了 SSH_CONNECTION=remote 以启用浏览器内目录选择器。
- 从手机打开生成的文件时出现 HTTP 403 → 使用内置的 /__files 查看器。

测试

node --test 针对进程内的假上游运行代理和文件查看器测试套件——无需 dsh 或 Tailscale:

- WebSocket 101 中继和上游拒绝透传
- 突然断开的韧性(代理必须在手机中途断流时存活,而不是崩溃)
- Host → Origin 规范化
- polyfill + 集成脚本注入(包括文档已经引用 crypto.randomUUID 的情况)
- /__files 路径包含、信任围栏和保留 CRLF 的写入

对于实时部署健康检查,运行 start-harness.ps1 -Verify:它断言组件所有权、dsh 携带其 --trusted-host 列表,以及两个 WebSocket 握手都返回 101 并带有 tailnet Origin(手机的确切请求路径)。

常见问题

- 这是公共互联网服务吗? 不是——设计上仅限 tailnet(通过 Tailscale 实现防火墙 + HTTPS)。
- 它会取代 dsh 吗? 不会——它部署并安全地暴露真实的 @deepseek-ai/dsh Web UI。
- 为什么需要代理? 因为 dsh web 故意拒绝绑定到回环地址之外。
- 它能在 macOS/Linux 上运行吗? 脚本面向 Windows(PowerShell、Windows 防火墙、计划任务)。代理本身是纯 Node,可以适配。

许可证

MIT。欢迎提交 Issue 和 PR。
预览分享卡片长什么样 ↓IslandManSwevo/deepseek-harness-tailscale
分享 · DeepSeek Harness Hub
IslandManSwevo/deepseek-harness-tailscale

经 Tailscale 从手机安全远程操控 Web UI

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