在手机上使用 DeepSeek Harness,不用把它暴露给同一 Wi-Fi 下的所有人。
42.1/100
综合分
10
GitHub 星标
608
npm 周下载
—/5
用户评分
数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-relaynpm 源 · dsh-relay 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-client-ui-plugin-manager@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-host-webserver给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- TLS加密远程访问
- 二维码/验证码设备配对
- 按设备吊销权限
给 DeepSeek Harness 网页配置档加上带认证的远程访问:TLS、二维码/验证码设备配对、密码登录、按设备吊销,全部挡在未改动的回环 harness 前面。
最近更新
在 GitHub 查看全部 →v0.3.02026-10-24
支持 Harness 0.1.7 到 0.2.x。在这些 Harness 上,已发布的 0.2.1 会直接弄坏 Web UI:它的浏览器端在等一个 0.1.7 已移除的客户端服务,页面只显示 dsh-relay: pending (waiting for service: settingsScope)(#11、#13)。npm 上的 0.2.1 tarball 还打包了比自身源码更旧的运行时,导致它根本无法向 Harness 认证。
dsh plugin --profile web add dsh-relay@0.3.0
还没上 npm?从这个 release 安装:
dsh plugin --profile web add
如果 pnpm 报 ERR_PNPM_ADDING_TO_ROOT,把 -w 放在 add 后面。
需要 Harness 0.1.7-rc.2 或更高版本,现在 Harness 会强制检查。在 Harness 0.1.2 到 0.1.5 上,继续用 0.2,并从它的 tag 安装:github:sorsama/deepseek-harness-relay#v0.2.1。
· 修复
· Web UI 重新能启动,设置页也回来了。位置在 Plugins → dsh-relay → Configure,就在 relay 自己那一行。保存会就地重新绑定 relay,不用重启。
· 冷启动不再让每个请求都卡在 401。relay 挂载时,Harness 还没写入签名密钥。以前它只读一次密钥,读不到就一直记着这个失败,直到进程结束。现在每个请求都会重新查,密钥出现后的第一个请求就能通过认证。
· npm tarball 不会再打包过期的运行时。prepack 会重新构建两端,CI 会解包 tarball 并校验里面的字节。
· 地址集变化不再让已配对的设备失联。以前 VPN 断开或 IP 变动会用新密钥重新签发自签名证书,导致每台手机的 pin 都失效。现在证书用存储的密钥重新签发。
· 地址授权不能覆盖多台手机。以前在同一台机器上通过反向代理配对,或从机器本身配对,会授权 loopback 或机器自己的局域网地址。这等于让代理的所有客户端、或宿主机上的所有容器无需凭据就能访问。
· 同一台手机的两个配对现在能在 /relay/devices 上区分开(#8)。
· 变更
· 支持范围 >=0.1.7-rc.2 <0.3.0-0 声明在 engines.dsh 和 dsh-* peers 上。Harness 会拒绝范围外的插件,并在提示里写明范围。
· relay 拒绝前置绑定到任何非 loopback 地址的 Harness(0.2.1 的 --host 允许这种),也拒绝自己提供 TLS 的 Harness。
· 验证
每次运行都在 Windows 上,针对隔离 home 里的真实 Harness,安装这个 tarball。Harness 0.2.1-rc.3、0.2.0-rc.2 和 0.1.7-rc.2 全部通过:
· 冷启动在第一个请求时自愈;
· Web UI 启动,浏览器端处于活动状态;
· 设置页正常渲染,改端口会重新绑定 relay,不用重启 Harness;
· Host 防护、配对、密钥 pin,以及 /api 和 /api/remote.mux 升级上的 bearer token 都正常;
· 机器自己的地址上没有地址授权。
在 0.2.1-rc.3 上,还检查了密码登录、吊销、pin 和密码在重启后保留,以及 --host 拒绝。两个较旧的 Harness 和一次独立代码审查由另外的 Antigravity Gemini 3.8 Flash 智能体执行。CI 在 Ubuntu 和 Windows 上全绿(146 个测试)。
由 @hazyumps 的 #12 构建,其中包含 @snailium 的 #10、@makhammadzhanov 的 #6、#14,以及 @js-easy-school 的 #9。报告和测量来自 #11 和 #13 里的 @dimpurr、@johnlam1968 和 @Cruzor-Blade。完整列表在 changelog 里。
v0.1.22026-08-23
安全加固版本:同机上的反向代理不再把它的客户端当成操作者。中继把回环 TCP 对端视为坐在键盘前的人——免密码、免配对。这条规则对机器上的浏览器是对的,对人们用来把中继放到公网的反向代理却是错的:Tailscale Funnel 文档里的 HTTP 目标恰好就是回环地址,经由它,未认证的 GET / 直接返回了 harness 本身(#1)。带转发头(Forwarded、X-Forwarded-*、X-Real-IP、Via)的回环请求现在归类为网络流量:必须出示凭证——持有设备 token 或会话 cookie 的代理客户端仍然可用——并且像任何网络地址一样受速率限制。本地浏览器不发送这些头,照旧直接放行。转发头只是线索,不是证明。剥离转发头的代理与操作者的浏览器无法区分,所以「把它暴露到公网」里的建议依然成立:让代理指向中继监听的某个非回环地址。dsh plugin --profile web add dsh-relay@0.1.2 由 @toolazytoname 报告。
v0.1.02026-08-21
为 DeepSeek Harness 的 web 配置档提供带认证的远程访问。
dsh plugin --profile web add dsh-relay
dsh web
然后在运行 harness 的机器上打开 /relay/password 设置密码。入门指南里以 npx @deepseek-ai/dsh web 为例走了一遍流程。
先移除 LAN 补丁。如果 ~/.dsh/profiles/web/cordis.patch.yml 把 harness 绑定到 0.0.0.0,中继会拒绝启动——它保护不了一个已经在无认证状态下响应网络的服务器。
· 功能
harness 在回环地址上提供浏览器 API,并明确说明它的 /api 防护「不是认证层」,配置面「在真正的认证层出现之前」只走回环,而 --host 0.0.0.0 会被拒绝,因为「那会把远程代码执行暴露到网络上」。这个插件就是那一层,挂在 harness 旁边而不是里面:第二个监听器,负责终止 TLS、做认证,再反向代理到原封不动的回环服务器。
· 密码登录(scrypt,签名的 HttpOnly;SameSite=Strict cookie),二维码和验证码设备配对,可吊销的 bearer token,设备列表,以及轮换密钥的「到处登出」。
· 自带 DNS 重绑定和跨站防护,在 Host 重写之前生效——否则 harness 的防护会先拦下它;还自带一份回环限定的方法列表,因为重写会把它抬掉。
· 自签名证书,附带公开的 SPKI pin,也可以自带证书。
· 整个 web UI 原样保留,角落多一个 Relay 链接,设置 → 插件里多一张卡片。
· _dsh._tcp mDNS 广播。
· DSH Mobile 0.5.0
它硬编码 讲清了源地址能证明什么、不能证明什么,CLIENT_INTEGRATION.md 则是给能持有 token 的客户端的约定。
· 安装之前
登录授予的权限等同于宿主机上的 shell,因为智能体在那里执行命令。这个插件里的一切都由此而来。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-relay
dsh-relay
在手机上使用 DeepSeek Harness,不用把它暴露给同一 Wi-Fi 下的所有人。
dsh-relay 是 Harness 的 web 配置档插件。它在 Harness 前面加上 HTTPS、密码和配对设备,这样你就能从网络里的另一台设备访问它;转发端口后,还能从任何地方访问。
它基于 DeepSeek Harness 构建,但不是 DeepSeek 官方项目。
为什么需要它
Harness 的 web 应用只监听 127.0.0.1,所以只有运行它的那台电脑能打开。这是有意为之。Harness 是编码智能体,会在你的机器上执行命令,作者拒绝 dsh web --host 0.0.0.0,因为这样「会把远程代码执行暴露到网络上」。
常见的绕法是用配置补丁把 Harness 绑定到 0.0.0.0,完全不设登录。这样一来,同一 Wi-Fi 下的任何人都能操控你的智能体,在你的电脑上执行命令。
dsh-relay 是更安全的做法。Harness 留在回环地址上,relay 作为第二个监听器跑在它旁边。每个请求先过 TLS 和凭证检查,relay 才会转发。
展开完整文档(README 剩余 1 节)
dsh-relay dsh-relay 在手机上使用 DeepSeek Harness,不用把它暴露给同一 Wi-Fi 下的所有人。 dsh-relay 是 Harness 的 web 配置档插件。它在 Harness 前面加上 HTTPS、密码和配对设备,这样你就能从网络里的另一台设备访问它;转发端口后,还能从任何地方访问。 它基于 DeepSeek Harness 构建,但不是 DeepSeek 官方项目。 为什么需要它 Harness 的 web 应用只监听 127.0.0.1,所以只有运行它的那台电脑能打开。这是有意为之。Harness 是编码智能体,会在你的机器上执行命令,作者拒绝 dsh web --host 0.0.0.0,因为这样「会把远程代码执行暴露到网络上」。 常见的绕法是用配置补丁把 Harness 绑定到 0.0.0.0,完全不设登录。这样一来,同一 Wi-Fi 下的任何人都能操控你的智能体,在你的电脑上执行命令。 dsh-relay 是更安全的做法。Harness 留在回环地址上,relay 作为第二个监听器跑在它旁边。每个请求先过 TLS 和凭证检查,relay 才会转发。 phone / browser ──TLS──▶ relay :3443 ──plain HTTP──▶ harness 127.0.0.1:3080 ├─ /relay/password ├─ /relay/login ├─ /relay/pair ├─ /relay/devices └─ everything else ─proxy─▶ /api · WebSocket downlinks · web UI 因为 Harness 从不离开回环地址,relay 崩溃或配置出错时,Harness 只会从网络上不可达,绝不会对网络敞开。如果 relay 发现 Harness 已经在网络地址上监听,它会拒绝启动。 Harness 0.1.2 及以后版本自带登录(浏览器会话 cookie)。但它们仍然拒绝绑定到网络,仍然没有 TLS,而且只在自己的页面上发放那个 cookie,所以手机仍然没有安全入口,除非有 relay 这样的东西。 你能得到什么 - 从任何浏览器用密码登录。猜错太多次,该地址会被锁定一段时间。 - 用二维码或 8 位数字码配对。每台配对设备有自己的 token,你可以单独吊销任意设备。配对码一次性使用,五分钟后过期,且只能在运行 Harness 的机器上创建。 - 「在所有地方退出登录」按钮,会轮换签名密钥,一次性登出所有浏览器和设备。 - HTTPS,可以用你自己的证书,也可以用自签名证书,其密钥可供应用固定。 - 在 _dsh._tcp 上做 mDNS 广播,应用不用扫描子网就能找到 relay。 - 完整的 harness Web UI,原样不变,角落多一个 Relay 链接。 - 在运行 harness 的机器上,打开 Plugins → dsh-relay → Configure 就是设置页。按 Save 立即生效,不用重启。 支持的 harness 版本 | Harness | dsh-relay | | 0.1.7-rc.2 到 0.2.x | 0.3(已在 0.2.1-rc.3、0.2.0-rc.2 和 0.1.7-rc.2 上测试) | | 0.1.2 到 0.1.5 | 0.2,从它的 git tag 安装:dsh plugin --profile web add github:sorsama/deepseek-harness-relay#v0.2.1。npm 上的 0.2.1 包带的是旧构建,无法向 harness 认证。 | | 0.1.1 及更早 | 0.1 | 装的版本和 harness 不匹配时,harness 会拒绝加载,并告诉你它需要哪个范围。0.3 依赖 harness 0.1.7 新增的设置系统,而 0.2 在 0.1.7 及更高版本上会让 Web 应用卡死,所以两者不能重叠。 快速开始 第一次用?docs/GETTING_STARTED.md 用 npx @deepseek-ai/dsh web 带你走完每一步,包括途中会看到什么。 1. 有 LAN 补丁就先删掉。 如果 ~/.dsh/profiles/web/cordis.patch.yml 把 harness 绑定到 0.0.0.0,删掉那一行。harness 已经对网络开放时,relay 不会启动在它前面。 2. 安装插件,重启 harness。 dsh plugin --profile web add dsh-relay dsh web 包是预构建的,你机器上不用编译任何东西。harness 启动后会打印 relay 的地址。 3. 设置密码。 在运行 harness 的机器上打开 https://127.0.0.1:3443/relay/password。密码存在之前,这个页面只能从该机器访问,所以网络上没人能抢先占用 relay。 4. 配对手机。 还是在那台机器上,打开 https://127.0.0.1:3443/relay/pair。用手机扫二维码,或者在手机上打开同一路径输入配对码。给设备起个名字,它就会出现在 /relay/devices 下。 PATH 里没有 dsh?所有命令都可以换成 npx @deepseek-ai/dsh ...。 在运行 harness 的机器上不会问你要密码。能坐到那个键盘前的人本来就有 shell,所以 relay 把 loopback 当作你本人。密码是给网络上其他一切用的。 配合 DSH Mobile 使用 DSH Mobile 0.8.0 及更高版本完整支持 relay。在应用里进入 Relay → Pair a relay,扫二维码或输入配对码。应用保存真正的 token,走 HTTPS,并固定 relay 的密钥,其他都不用配。 等你用的每个应用都升到 0.8.0 并完成配对后,在配置里关掉兼容桥: compat: addressGrants: false 使用 DSH Mobile 0.5.0 到 0.7.0 这些旧版本在 relay 出现之前就发布了,有两个限制。 他们连不上自签名的 HTTPS 服务器。0.6.0 之前,应用只支持 http://。0.7.0 加入了 https://,但只支持受信任机构签发的证书,自签名中继的证书不属于这一类。要支持这类服务器,在 HTTPS 监听之外再跑一个纯 HTTP 监听: DSH_RELAY_PLAIN_PORT=3444 dsh web 这个监听没有登录页和配对页,也永远访问不到 harness 设置或凭据。 他们也无法发送任何凭据:没有 Authorization 头,没有 cookie,没有 Origin。所以换个办法:从手机浏览器完成配对,中继记住手机的网络地址,之后应用从同一地址连进来就放行。 网络地址不是真正的认证。NAT 后面地址是共享的,DHCP 和 IPv6 隐私地址会让它变化,同一 Wi-Fi 上的任何设备都能伪造。中继限制了危害范围(只接受私有地址、一天后过期、撤销设备时移除、永远不许进入设置),但真正的解决办法是更新应用。 如果你在写自己的客户端,docs/CLIENT_INTEGRATION.md 就是你要遵循的协议。 配置 有三个地方可以改设置: - 运行 harness 的机器上,Plugins → dsh-relay → Configure 设置页。 - 单次运行用的环境变量,例如 DSH_RELAY_PORT=8443 dsh web。没有 --relay-* 命令行参数,因为 harness 会拒绝任何它不认识的参数。 - 永久修改写在 ~/.dsh/profiles/web/cordis.patch.yml 的 relay 行里。 docs/CONFIGURATION.md 列出了所有选项,还有如何配置证书、如何从互联网访问中继。 暴露到互联网之前 先读配置指南的互联网部分。简要版: - 转发中继的端口,绝不要转发 harness 的端口。 - 用真实证书。 - 设置 compat.addressGrants: false 和 privilegedMethods: loopback-only。 - 不要把 Tailscale Funnel、Tailscale Serve、nginx 或 Caddy 指向 127.0.0.1:3443。这些代理从 loopback 连进来,而中继把 loopback 当作你本人,所以不会向任何人要密码。 安全 登录中继就等于拿到宿主机上的 shell,因为智能体在那里执行命令。这个插件的一切都围绕这个事实设计。docs/SECURITY.md 说明了中继防住什么、防不住什么,以及如何报告漏洞。 文档 | 指南 | 什么时候读 | | 入门 | 第一次设置中继。 | | 配置 | 想改端口或证书,或者要从网络外部访问中继。 | | 故障排查 | 有东西不工作。 | | 安全 | 你想确切了解中继保护了什么。 | | 客户端集成 | 你正在构建一个与中继通信的应用。 | | 贡献 | 你想构建、测试或修改插件。 | 开发 pnpm install pnpm build # tsc -b, then tsdown pnpm test pnpm typecheck CONTRIBUTING.md 介绍了如何用源码检出对真实 harness 运行,以及发布流程。 命名 harness 的品牌指南要求社区项目使用 DSH 缩写,而不是完整商标,并且不要使用官方品牌素材。因此 npm 包名为 dsh-relay,中继的页面使用本项目自己的 logo。 许可证 MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
sorsama/deepseek-harness-relay
在手机上使用 DeepSeek Harness,不用把它暴露给同一 Wi-Fi 下的所有人。
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。