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

远程内网穿透 osmondlee/dsh-web-tailscale

DeepSeek Harness
osmondlee80 天前有提交已提供中文文档扫描:无法判定

经 Tailscale 加密内网远程操控本机 Web UI

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

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
⚪ 扫描:无法判定尚无人工评估
展开查看扫描说明与证据 ↓

已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。

  • · 包内无可扫 JS
  • · TS 源码(可能为非 JS 实现或未发布源码),无法判定
扫描于 2026/11/3(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

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

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

功能亮点

  • 密码门认证
  • 远程操控本机WebUI

远程访问 DeepSeek Harness(dsh)Web UI,走 Tailscale 加 dsh-web-auth 密码门:覆盖补丁、PowerShell 启动器、文档

README

由 DeepSeek 最新模型翻译生成
dsh-web-remote 让手机/平板在任意网络下,经 Tailscale 加密内网远程访问并操控本机 DeepSeek Harness(dsh)Web UI,Agent 仍在本机执行。 - 不改 dsh 源码;只用官方 launcher flag + 官方用户 patch 层(--patch 叠加层)+ 社区插件 henlii/dsh-plugins 的 dsh-web-auth 密码认证; - 不 "绑 0.0.0.0 + 无密码":非回环 /api 与 WebSocket 全部在密码墙之后; - 桌面版 / 普通 dsh web 实例完全不受影响(叠加层只被远程实例加载)。 重要结论(已实测核对,dsh 0.1.0-rc.6) 1. 该版本 dsh web --host 只接受 127.0.0.1 / 0.0.0.0(webserver schema 校验,传其他地址直接启动失败),且 CLI 明确拒绝 --host 0.0.0.0(官方安全设计)。因此"直接绑 Tailscale 网卡 IP" 在 0.1.0-rc.6 不可行,请勿按旧教程传 --host 100.x。
展开完整文档(README 剩余 1 节)
dsh-web-remote

让手机/平板在任意网络下,经 Tailscale 加密内网远程访问并操控本机 DeepSeek Harness(dsh)Web UI,Agent 仍在本机执行。

- 不改 dsh 源码;只用官方 launcher flag + 官方用户 patch 层(--patch 叠加层)+ 社区插件 henlii/dsh-plugins 的 dsh-web-auth 密码认证;
- 不 "绑 0.0.0.0 + 无密码":非回环 /api 与 WebSocket 全部在密码墙之后;
- 桌面版 / 普通 dsh web 实例完全不受影响(叠加层只被远程实例加载)。

重要结论(已实测核对,dsh 0.1.0-rc.6)

1. 该版本 dsh web --host 只接受 127.0.0.1 / 0.0.0.0(webserver schema 校验,传其他地址直接启动失败),且 CLI 明确拒绝 --host 0.0.0.0(官方安全设计)。因此"直接绑 Tailscale 网卡 IP" 在 0.1.0-rc.6 不可行,请勿按旧教程传 --host 100.x。
2. 正确路线:用 launcher 的 --patch 叠加层把 webserver 行整体替换为 0.0.0.0(schema 合法的配置值),同一叠加层挂载 dsh-web-auth 密码墙;再配合防火墙只放行 Tailscale 网段(100.64.0.0/10),局域网设备不可达。
3. npm 上的 dsh-web-auth 是同名异包(webserver fork 架构),不是 henlii 的插件。
必须按 henlii 文档用本地路径 / git 源安装。
4. --patch 是 dsh web 子命令自带的 launcher 选项,位置在 web 之后、应用 flag (--port / --trusted-host)之前;放错位置会报 web takes none of parent --profile, --patch, ...。

快速开始

1. 前置

node --version # >= 20.19,推荐 22+
pnpm --version # dsh plugin 需要 pnpm
npx --yes @deepseek-ai/dsh --version
tailscale status # 本机已登录并在线;手机加入同一 tailnet(同一账号) tailscale ip -4 # 记下本机 100.x 地址 MagicDNS 域名:tailscale status --json 的 Self.DNSName(注意去掉结尾的点)

2. 安装 dsh-web-auth(henlii 文档的本地路径方式)

git clone --depth 1 https://github.com/henlii/dsh-plugins \dsh-plugins
dsh plugin --profile web add "\dsh-plugins\plugins\dsh-web-auth"

- 预期出现 declares no dsh.bundle — installed as a plain dependency 警告:正常,该插件靠 insert 行挂载,不走 bundle 层。
- 若 profile 的 pnpm 状态由其他插件市场管理(package.json 依赖为空但 node_modules 里有插件),跑 pnpm add 可能剪枝——此时可把插件目录直接复制到 $DSH_HOME\profiles\web\node_modules\dsh-web-auth(该插件零依赖,效果等价)。

3. 生成远程叠加层

把本仓库的 web-remote.patch.example.yml 复制为 $DSH_HOME\web-remote.patch.yml(或直接运行本仓库脚本的 -InstallAuth 自动生成)。

4. 设置访问密码并启动

一键脚本(推荐):-NewPassword 生成 24 位随机密码并写入用户环境变量 pwsh -File .\start-dsh-web.ps1 -NewPassword

或手动(npx 形态) $env:DSH_WEB_AUTH_PASSWORD = '你的密码' $env:DSH_WEB_AUTH_TOKEN_FILE = "$env:DSH_HOME\web-auth-tokens.json"
npx --yes @deepseek-ai/dsh web --patch "$env:DSH_HOME\web-remote.patch.yml" --port 3080
--trusted-host --trusted-host

--trusted-host 填的是手机地址栏里敲的地址(本机 Tailscale IP / 本机 MagicDNS 域名),不是手机的 IP;精确匹配、无通配符、域名不带结尾点。

5. 手机访问

1. 手机安装 Tailscale,登录与 PC 相同的账号;
2. 浏览器打开 http://:3080 或 http://:3080;
3. 首次出现全屏 "访问需要密码" 登录卡片,输入密码后进入 UI(cookie 默认 12 小时,服务重启不失效);本机日常用 http://127.0.0.1:3080 免密。

脚本说明(start-dsh-web.ps1,需 pwsh 7+)

- 端口检查(识别"已在运行"或占用者 PID)→ Tailscale 探测(未登录直接提示 tailscale up)→ 启动器自动选择(默认桌面版自带 node,-Launcher npx|dsh|pnpm 可切换)→ 启动 + 日志重定向($DSH_HOME\logs\dsh-web.{out,err}.log)→ 健康检查(回环 /→200;Tailscale 地址 /api/auth/status→401=密码墙生效, 503=没配密码、404=插件没挂载)→ 汇总输出。
- 子命令:-InstallAuth(生成叠加层并校验插件已装)、-NewPassword(生成并持久化密码)、 -Status、-Stop(含 cmd/npx 包装下孤儿进程兜底)、-Password ''、 -ExtraTrustedHosts 、-Port 、-SkipHealthCheck。
- 可选防火墙收口(管理员 PowerShell,仅 Tailscale 网段可达):

New-NetFirewallRule -DisplayName 'dsh web (Tailscale)' -Direction Inbound -Action Allow -Protocol TCP -LocalPort 3080 -RemoteAddress 100.64.0.0/10

为什么这么做

| 决策 | 理由 |
| 不传 --host 100.x | rc.6 webserver schema 只接受 127.0.0.1/0.0.0.0(实测启动报错) |
| --patch 叠加层注入 host: '0.0.0.0' | schema 合法;patch 语义是"整体替换目标行 config",因此连同 port 一起重写 |
| 必须叠加 dsh-web-auth | 0.0.0.0 绑定下非回环 /api 可达(实测),官方信任围栏明确"不是认证层",密码墙才是访问控制 |
| --trusted-host 填本机 TS 地址 | 官方围栏校验请求 Host 头 = 地址栏里的地址;带端口只匹配该端口,不带匹配任意端口 |
| 不改 profiles/web/cordis.patch.yml | --patch 层只被远程实例加载,桌面版实例行为不变 |
| tokenFile 显式指定 | 插件默认是 Linux 路径,Windows 上必须重定向,登录才能跨重启保持 |
| 防火墙 RemoteAddress 100.64.0.0/10 | 0.0.0.0 监听下把可达面收窄到 Tailscale 网段 |

故障排查

| 现象 | 原因 | 修复 |
| 手机超时 | Tailscale 未登录/手机未连 | tailscale status 两节点在线;tailscale ip -4 非空,否则 tailscale up |
| 手机拒连 | Windows 防火墙 | 管理员执行上文 New-NetFirewallRule(100.64.0.0/10) |
| /api 403 | Host 不在 --trusted-host | 地址栏地址必须精确列入;域名不带结尾点;不能用通配符 |
| 无登录卡片,/api/auth/status→404 | 插件没挂载 | 确认本地路径安装、启动带 --patch 叠加层 |
| 登录报 503 未配置密码 | 子进程没拿到环境变量 | 用脚本启动,或先 $env:DSH_WEB_AUTH_PASSWORD='...' |
| 设置页空白 | 官方非回环 settings 走 memory 作用域 | 插件已内置客户端补丁(lanHosts 自动从 trustedHosts 派生);失效时在叠加层补 lanHosts |
| $.host expected "127.0.0.1" \| "0.0.0.0" | 传了 --host 100.x | 去掉 --host,交给叠加层注入 |
| web takes none of parent --patch... | --patch 放错位置 | 顺序:dsh web --patch |
| dsh plugin add 报 pnpm 找不到 | pnpm 不在 PATH | npm i -g pnpm |
| 手机报 Failed to load plugins … slot "conversation.composer.dock" is not declared | 某些桌面配套插件(如 dsh-balance)用一次性 effect 直接注册槽位,慢设备上先于 conversation 模块声明执行(时序竞态) | 在叠加层对该插件行加 disabled: true(见 example 文件注释);桌面端若复现同样处理 |
| 两个实例同时跑 | 共享同一 $DSH_HOME 会话存储 | 可共存(原子写入),建议不要同时重度使用 |

升级注意事项

- dsh 升级后先 dsh web --help 并试传 --host :若未来版本放开 schema,把叠加层 host: '0.0.0.0' 改为 Tailscale IP 即可回到更窄绑定;
- dsh-web-auth 会 patch @deepseek-ai/dsh-client-connection 客户端 bundle 里的特定代码串,升级 dsh 后若认证/设置页异常,检查插件新版。

参考

- deepseek-harness(CLI/profile/patch 语义、 --host/--port/--trusted-host、信任围栏)
- henlii/dsh-plugins(dsh-web-auth 安装与配置)
- 官方 Discussion #900(Windows 上 127.0.0.1 vs localhost 的 403 现象)
预览分享卡片长什么样 ↓osmondlee/dsh-web-tailscale
分享 · DeepSeek Harness Hub
osmondlee/dsh-web-tailscale

经 Tailscale 加密内网远程操控本机 Web UI

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