dsh-full-remote:爲 DeepSeek Harness 提供可審計的遠程訪問網關

前言

DeepSeek Harness(DSH)的 Web 服務默認只監聽本機迴環地址,並且對 HostOrigin 頭有嚴格校驗:只有來自 127.0.0.1 的請求才能調用 settings.*credentials.*host.listDirectory 等特權接口。頁面可以打開,但這些接口會返回 403。

常見做法是用 SSH 端口轉發、Caddy、frp、ngrok 或 Cloudflare Tunnel 把 Web UI 暴露到公網或局域網。經過通用隧道後,請求頭裏的主機名會變成公網域名,Harness 的信任檢查就會失敗。有些方案只加密碼認證,不改寫請求頭,特權 API 仍然不可用;有些局域網插件沒有認證,不適合公網暴露。

下面介紹 dsh-full-remote:在隧道與 Harness Web 服務之間插入一層帶 token 認證的反向代理,改寫 Host/Origin 爲迴環地址,同時用獨立的訪問控制層替代 Harness 原有的信任檢查。

這是什麼

dsh-full-remoteDeepSeek Harness 的插件,由 JUANWANG-BUAA 維護,已收錄於 awesome-dsh-plugin。npm 包名同爲 dsh-full-remote,當前版本 0.3.8,許可證 MIT,要求 Node.js ^22.19>=24

插件在 Harness Web 服務(默認 127.0.0.1:3080)前面啓動一個反向代理(默認 127.0.0.1:3081)。遠程瀏覽器經隧道連到代理後,代理校驗訪問 token 或設備會話,改寫請求頭並轉發 HTTP、SSE、WebSocket 流量,使設置、憑據、目錄瀏覽等特權 API 在遠程場景下仍可正常工作。

它解決什麼問題

做法 結果
通用隧道(SSH 轉發、Caddy、綁定 0.0.0.0 頁面能加載;settings.* / credentials.* / host.listDirectory 返回 403
無認證的局域網插件 局域網可用;不適合公網暴露
僅密碼認證、不改寫請求頭 請求已認證,特權 API 仍被攔截

dsh-full-remote 的做法是:代理把 HostOrigin 改寫爲 127.0.0.1 後再轉發,讓 Harness 的信任檢查通過;同時因爲改寫會繞過 Harness 原有的遠程客戶端檢查,插件用 token、設備會話、可選審批和審計日誌建立自己的訪問控制層。

核心功能

特權 API 保持可用

代理轉發後,以下接口在遠程訪問時不再被 403 攔截:

  • settings.describe / update / replace / mutate
  • credentials.describe / set / unset
  • host.listDirectory / pickDirectory / openPath
  • agentPreset.*llm.discoverModels

訪問控制

  • 訪問 token:192 位 token,保存在 mode 0600 的狀態文件中;可在本地面板查看和輪換。
  • 按設備會話:每次登錄創建獨立設備憑據,持久化只存哈希;面板可重命名、吊銷設備,並顯示登錄 IP 與最近訪問 IP。
  • 首次訪問審批(可選):新設備在頁面上等待,需從本地面板批准後才能繼續。
  • 手機邀請:通過二維碼或一次性鏈接(單次使用、15 分鐘過期)接入;鏈接不含長期 token。同 IP 瀏覽器在 60 秒內重試可複用原設備會話,避免隧道抖動導致重複登錄。
  • 登錄防護:失敗登錄有固定延遲和按 IP 鎖定;可選 CIDR 白名單限制遠程 IP。
  • 轉發 IP 識別:可選 trustForwardedFor,從受信任本地隧道的 X-Forwarded-For 最右值取真實客戶端 IP;CF-Connecting-IP 爲 Cloudflare 專用可選項。

運維與審計

  • 圍欄自檢:用與代理相同的 Host/Origin 改寫探測 settings.describe,確認代理鏈路正常。
  • JSONL 審計日誌:記錄登錄、審批、吊銷、token 輪換、啓停、WebSocket 開/拒等事件;面板可查看近期事件並導出 JSON;日誌超過 8 MB 自動輪轉,保留一代歷史。
  • 協議支持:轉發 HTTP、SSE、WebSocket;可壓縮的 HTTP 響應(HTML/JS/CSS/JSON/SVG,≥1 KB)可 gzip;SSE 和 WebSocket 不壓縮。
  • 其他:運行時可改監聽地址,綁定失敗自動回滾;可選本地 TLS(tlsCertFile / tlsKeyFile);健康檢查端點 /_dsh_reverse_proxy/healthz;WebSocket 升級失敗按 IP 限流。

可選 Cloudflare 快速隧道

插件可臨時啓動 Cloudflare quick tunnel,生成二維碼供手機掃碼。也可把現有 SSH、frp、ngrok、Tailscale 或 cloudflared 隧道指向面板顯示的代理目標地址。快速隧道是可選且臨時的,不是託管的生產部署方案。

安裝與啓用

在 DSH 的 web profile 下安裝並啓動:

dsh plugin --profile web add dsh-full-remote
dsh --profile web

安裝完成後,打開 Settings → Reverse proxy 面板管理代理。

典型用法

快速遠程訪問

  1. Settings → Reverse proxy 點擊 Start proxy 啓動反向代理。
  2. 點擊 Start Cloudflare quick tunnel,掃描生成的二維碼。邀請鏈接爲一次性,不包含長期訪問 token。
  3. 手機或遠程瀏覽器完成 token 輸入或設備審批後,即可使用完整 Web UI,包括設置、憑據和目錄操作。

使用已有隧道

在受控網絡中,不必用 Cloudflare 快速隧道。把 SSH、frp、ngrok、Tailscale 或 cloudflared 隧道指向面板顯示的本地代理地址(默認 127.0.0.1:3081)即可。

請求流轉

flowchart LR
    A[手機或遠程瀏覽器] --> B[公網隧道<br>cloudflared / ngrok / frp / SSH]
    B --> C[dsh-full-remote<br>127.0.0.1:3081<br>認證 + 頭改寫]
    C --> D[DeepSeek Harness Web<br>127.0.0.1:3080]
  1. 遠程瀏覽器經公網隧道連到插件監聽器。
  2. 請求須攜帶訪問 token、有效一次性邀請或已有設備會話;未通過認證的請求不會到達後端。
  3. 代理改寫 Host/Origin 爲迴環地址,移除不可信頭,轉發到 Harness Web 服務。

適用場景與注意

適合誰

  • 需要用手機或另一臺設備遠程操作 DSH Web UI,且要用到設置、憑據、目錄瀏覽等特權功能。
  • 已有 SSH、frp、ngrok、Tailscale 等隧道,希望在不改 Harness 源碼的前提下打通遠程訪問。
  • 需要按設備管理會話、審計登錄事件,或對首次接入做人工審批。

使用前注意

  • 插件以當前 dsh 進程的權限運行,安裝前建議閱讀 源碼SECURITY.md,理解安全模型。
  • 把監聽器暴露到公網前,務必配置 token、設備審批或 CIDR 白名單;快速隧道僅適合臨時調試,不宜當作生產部署。
  • 請求頭改寫會替代 Harness 原有的遠程信任檢查,訪問控制完全依賴插件自身的認證層。
  • 與其他 DSH 插件的兼容性見倉庫內 compatibility.md

鏈接

經過上面的步驟,dsh-full-remote 把「頁面能打開但特權 API 403」的遠程訪問問題,收斂爲一套帶 token 門禁、按設備會話和審計日誌管理的反向代理方案。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜