Development & Runtime

dsh-remote-access

tyouter/dsh-remote-access · ★ 0

tyouter

One-click remote access for DeepSeek Harness (DSH): Tailscale + Cloudflare tunnel QR launcher with automatic auth

README body is shown in Chinese.

License
MIT
Added
2026-08-16
Maintenance
active
Install kind
github
Manifest details
Manifest status
Not verified
Manifest path
-
Manifest checked
2026-08-19
Lifecycle scripts
None found

Static manifest checks report declarations only; they are not compatibility or security review.

安装

dsh plugin --profile web add github:tyouter/dsh-remote-access

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

For install and environment setup, plus plugin development tutorials, see DSH community docs ↗

README

Source README · body: zh · Read Chinese README

Table of contents
  1. 架构
  2. 前置条件
  3. 一键部署
  4. 1. 克隆本仓库
  5. 2. 安装网络层
  6. 3. 给 DSH 装插件
  7. 4. 重启 DSH
  8. 配置文件与数据目录
  9. 自定义端口
  10. Tailscale 通道(可选)
  11. 隐私与安全
  12. 本仓库不包含任何隐私信息
  13. 安全边界
  14. 你需要做到
  15. 访问日志
  16. 常见问题
  17. 二维码能扫,但页面打不开
  18. 重启电脑后隧道地址变了
  19. 页面能开,但聊天/API 报错
  20. 手机提示 401
  21. 速度慢
  22. 目录结构
  23. 致谢

给 DeepSeek Harness(dsh)Web UI 添加“远程连接”入口:

  • 在侧边栏“设置”上方新增 远程连接 按钮
  • 弹窗内展示两个小二维码:
    1. Tailscale 通道:同一 tailnet 内访问
    2. 外出高速通道:Cloudflare 加密隧道,手机在外也能用
  • 扫码 + 账号密码双重认证;首次登录后保持登录状态
  • DSH 本身仍只监听 127.0.0.1,不暴露公网端口

本文所有示例均使用占位符,不含任何真实 IP、域名、密钥或 Token。


架构

┌────────────┐
│ 手机浏览器 │
└─────┬──────┘
      │ 1) Tailscale 专用网      2) Cloudflare 公网隧道
      ▼
┌──────────────────────────────────────────────┐
│ Caddy 认证代理(本机 127.0.0.1:18080)         │
│  - HTTP Basic Auth 账号密码                   │
│  - /enter/<token> 写入 cookie 后跳转          │
│  - 带 cookie 的请求才允许反向代理             │
│  - 强制改写 Host/Origin,避免 DSH 信任栅栏 403 │
└──────────────┬───────────────────────────────┘
               ▼
      DSH Web(127.0.0.1:3080,不对外监听)

配套组件:

组件 作用
dsh-plugin/ DSH 客户端插件:两个二维码 + 状态检测
patch-dsh.ps1 把插件装进 DSH 源码树并构建
install.ps1 下载 Caddy/cloudflared,生成 token,启动隧道,安装开机自启
start-cloud-access.ps1 开机时拉起 Caddy 和 cloudflared,并发布最新隧道 URL
uninstall.ps1 停止服务并清理

前置条件

  • Windows 10/11(当前脚本面向 Windows;macOS/Linux 用户可参考脚本改成 systemd)
  • 一个能跑 pnpm dsh web 的 DeepSeek Harness 源码 checkout
  • 能访问 GitHub 和 Cloudflare 的网络
  • 手机能访问 trycloudflare.com

不需要:公网 IP、光猫/路由器端口映射、云服务器、域名。


一键部署

1. 克隆本仓库

git clone <你的仓库地址>
cd dsh-remote-access

2. 安装网络层

powershell -ExecutionPolicy Bypass -File .\install.ps1

脚本会:

  1. 下载 caddy.exe 和 cloudflared.exe 到 ~/.dsh-remote-access/bin
  2. 生成随机访问 token
  3. 生成 Caddy 认证代理配置
  4. 启动 Caddy + Cloudflare 快速隧道
  5. 在启动文件夹创建开机自启项

成功后脚本会打印一个 <tunnel>/enter/<token> 入口地址。不要公开发这个地址。

3. 给 DSH 装插件

powershell -ExecutionPolicy Bypass -File .\patch-dsh.ps1 -DshRoot D:\path\to\deepseek-harness

脚本会:

  1. 复制 dsh-plugin/ 到 packages/client/ui-remote-access
  2. 在 web-app bundle 中登记插件
  3. 执行 pnpm install
  4. 编译客户端插件

4. 重启 DSH

cd D:\path\to\deepseek-harness
pnpm dsh web

然后点击侧边栏底部的 远程连接,扫描 外出高速通道 二维码即可。


配置文件与数据目录

默认数据目录:

C:\Users\<你>\.dsh-remote-access\
├── bin\caddy.exe
├── bin\cloudflared.exe
├── caddy\Caddyfile
├── access-token.txt      # 随机入口 token
├── access-account.txt    # 首次登录账号密码
├── tunnel-url.txt        # 当前隧道入口 URL(插件读取)
├── start-cloud-access.ps1
└── logs\

DSH 插件通过环境变量读取同一目录:

环境变量 默认值 说明
DSH_REMOTE_ACCESS_DIR ~/.dsh-remote-access 数据目录
DSH_REMOTE_AUTH_PROXY http://127.0.0.1:18080 Caddy 认证代理地址

install.ps1 已自动写入这两个用户环境变量。


自定义端口

# DSH 在 4000,代理用 9090
.\install.ps1 -DshPort 4000 -ProxyPort 9090

之后记得用相同参数启动 DSH:

pnpm dsh web --port 4000

Tailscale 通道(可选)

即使没有 Tailscale,公网隧道也能用。想保留两个通道:

  1. 电脑和手机都安装并登录 Tailscale
  2. 打开 DSH 的“远程连接”弹窗,点击 开启 Tailscale serve
  3. 扫左侧二维码

插件会执行:

tailscale serve --bg --https=443 http://127.0.0.1:<ProxyPort>

所以 Tailscale 流量也会经过 Caddy 认证代理。

如果运营商是双层 NAT,Tailscale 可能仍走 DERP 中继而偏慢;这正是保留 Cloudflare 通道的原因。


隐私与安全

本仓库不包含任何隐私信息

所有示例值均为占位符:

<你的仓库地址>
<你的用户名>
<你的安装目录>
<你的 DSH checkout 路径>

真实 token、隧道地址、Tailscale 域名、IP 都在你机器本地生成,不会进入仓库。

安全边界

  • Cloudflare 隧道是公网可达的随机地址,但访问还需要:
    1. /enter/<token> 正确入口路径
    2. HTTP Basic Auth 账号密码
  • 只有同时通过“入口 token + 账号密码 + cookie”才可访问;未登录请求只返回 401
  • Caddy 会移除浏览器 Origin 并把 Host 改写为 127.0.0.1:<DSH端口>,所以 DSH 的 /api 信任栅栏正常工作
  • Caddy 只绑定 127.0.0.1:<代理端口>,局域网内其他机器无法直连
  • DSH 服务本身不监听 0.0.0.0
  • 隧道流量在手机与 Cloudflare 边缘之间为 TLS 加密;Cloudflare 到本机由 cloudflared 建立加密隧道

你需要做到

  • 不要把二维码或 tunnel-url.txt 的内容发给别人
  • 不要把 access-token.txt / access-account.txt 提交到任何 Git 仓库
  • 更换设备或怀疑泄露时,删除数据目录并重跑 install.ps1(token 和密码都会重新生成)

访问日志

Caddy 默认把每次请求写入:

<数据目录>\logs\access.log

JSON 格式,10 MiB 自动滚动,保留 5 份。日志包含:

  • 访问时间、状态码、路径、耗时
  • Cloudflare 提供的真实访问者 IP 和国家
  • User-Agent / Referer
  • 请求来源是否认证成功

Cookie 内容会被 Caddy 自动脱敏为 REDACTED,不会写进日志。

快速查看最近 20 条:

Get-Content ~\.dsh-remote-access\logs\access.log -Tail 20

如果你看到非自己设备的 IP / UA / 异常路径,请立即运行:

.\uninstall.ps1 -RemoveData
.\install.ps1

以作废旧 token。


常见问题

二维码能扫,但页面打不开

  1. 确认 DSH 正在本机 127.0.0.1:3080 运行

  2. 确认 Caddy 在运行:

    Get-Process caddy
    
  3. 查看日志:

    Get-Content ~\.dsh-remote-access\logs\caddy.err.log -Tail 30
    Get-Content ~\.dsh-remote-access\logs\cloudflared.err.log -Tail 30
    

重启电脑后隧道地址变了

tunnel-url.txt 会自动更新。打开“远程连接”弹窗点一下 刷新,二维码就是新地址。

页面能开,但聊天/API 报错

检查 Caddy 是否在转发时改写了 Host/Origin。正确配置中的两行是:

header_up -Origin
header_up Host 127.0.0.1:<DSH端口>

手机提示 401

说明 cookie 没有写入。直接扫“外出高速通道”二维码,URL 里应包含 /enter/<token>。不要用裸域名。

速度慢

Cloudflare 免费隧道不保证全球线路质量。常见优化:

  1. 重新扫码,Cloudflare 可能更换边缘节点
  2. 若你在海外且访问国内电脑,物理距离决定延迟,任何隧道都只能接近理论 RTT
  3. Tailscale 直连失败时走 DERP 会慢;如能进入光猫后台,给 Tailscale UDP 41641 做端口映射/开启 UPnP

目录结构

.
├── README.md
├── LICENSE
├── SECURITY.md
├── .gitignore
├── dsh-plugin/
│   ├── package.json
│   ├── tsconfig.json
│   ├── tsdown.config.ts
│   └── src/
│       ├── index.ts
│       ├── invariant.ts
│       ├── css-modules.d.ts
│       └── client/
│           ├── index.ts
│           ├── RemoteAccessAction.tsx
│           └── RemoteAccessAction.module.css
├── install.ps1
├── patch-dsh.ps1
├── start-cloud-access.ps1
└── uninstall.ps1

致谢