前言¶
DeepSeek Harness(DSH)在 Desktop 殼或 dsh web 模式下啓動 Web GUI 時,每次都會重新分配隨機端口和一次性 launch token,終端裏打印的 URL 隨之變化。書籤、手機主屏快捷方式或局域網分享因此很難長期可用。社區插件 dsh-share-webui(維護者 vantoo)在 Host 進程內運行固定端口轉發,對外保留穩定地址,並在內部完成 token 握手。本文基於 GitHub 倉庫 README 介紹其定位、能力與用法;DSH 生態以「一切皆插件」爲思路,SkillHub 目錄頁 爲社區收錄站點,與 DeepSeek / 幻方無官方從屬關係。
這是什麼¶
dsh-share-webui 歸類爲聯網工具:把當前 harness 實例的 Web GUI 通過可配置的固定端口和可選監聽範圍(本機迴環、局域網、Tailscale 等)共享出去;設置頁 Settings → Web sharing 可即時切換主機、複製穩定入口與會話鏈接。插件版本在 package.json 中爲 0.3.1,許可證 MIT,要求 DSH >= 0.2.1-rc.2(README 徽章;package.json 的 engines.dsh 另標註上限,安裝前請以你本地的 DSH 版本與插件聲明爲準)。
核心功能¶
穩定地址與多主機監聽¶
- 迴環地址默認始終提供服務(默認
http://127.0.0.1:30800,端口可在設置中修改);按所選主機分別監聽,局域網與 Tailscale 地址需顯式勾選啓用。 - Settings → Web sharing 中可 live 切換 Host;選擇會持久化,無需重啓 harness。
- 同時支持 Desktop 與
dsh web兩種 profile。
設置頁能力概覽¶
| 項 | 作用 |
|---|---|
| Fixed port | 固定入口背後的端口(默認 30800)。「Apply」會先探測再綁定:成功顯示綠色「Port is available」,端口被佔用則紅色提示且不切換。填 0 可關閉固定入口。 |
| Allowed hosts | 以方塊展示本機(127.0.0.1,始終開啓)、LAN、Tailscale(100.x,含 MagicDNS 名)、Any host(0.0.0.0,有風險)。多選後轉發器立即重綁。 |
| Host | 固定入口使用的 hostname,下拉僅列出已選主機。 |
| Fixed entry | 穩定 URL,可複製。 |
| Session link | 帶 token 的本會話 URL,可複製。 |
| Access control | 僅在主機側(Desktop 殼,或通過 127.0.0.1 打開的設置頁)生成六位配對碼、查看已配對設備並逐臺撤銷;遠程頁面看不到該區塊。 |
首次選擇與後續變更寫入 $DSH_HOME/share-webui.json,重啓後仍有效。LAN 地址優先通過 UDP connect 探測本機出口地址(不發包、不解析域名),失敗再回退到 route/ip 或網卡名啓發式;Tailscale 會從 tailscale status --json 讀取 MagicDNS 名並加入允許列表。
訪問控制(配對)¶
固定入口默認不面向陌生人:除迴環外,訪問需先配對一次。
- 在 Settings → Web sharing → Access control 點擊「Generate pairing code」獲取六位碼(有效期 10 分鐘,一次性;「Cancel code」可立即作廢)。
- 在手機或平板上打開固定入口(例如
http://192.168.1.10:30800/),在配對頁輸入該碼。 - 瀏覽器獲得
dsh-share-devicecookie(HttpOnly、SameSite=Lax、一年),之後直接進入 Web GUI。
同一地址 5 分鐘內最多 5 次嘗試;錯誤猜測不會作廢當前碼(避免配對 DoS)。已配對設備列表支持按設備 Revoke,立即生效。設備記錄保存在 $DSH_HOME/share-webui-devices.json(權限 600,僅存各設備 secret 的 SHA-256)。網關不提供管理頁:未配對訪客只會看到配對錶單;發碼、列設備、撤銷均通過主機校驗的 RPC 在 DSH 設置頁完成。
完全開放可在配置中將 access 設爲 open,但設置頁關閉 Host 檢查需顯式確認,且每次啓動會打警告日誌。
Cloudflare Access(經 tunnel 暴露時)¶
當 cloudflared 將固定入口發佈到公網時,請求可能一律來自 127.0.0.1,從而繞過配對。插件可選啓用 Cloudflare Access:對攜帶 Cloudflare 邊緣頭或 Cf-Access-Jwt-Assertion 的請求校驗 JWT(RS256,iss/aud/exp/nbf,公鑰自 <team>/cdn-cgi/access/certs 拉取並緩存 10 分鐘,拉取失敗則 fail closed)。迴環與 LAN 無這些頭時仍走配對,兩路徑互不干擾。首次 Access 登錄成功後同樣發放一年期 dsh-share-device cookie,設備可在列表中按郵箱展示並單獨撤銷。
可選 YAML 配置¶
日常使用以設置頁爲主;也可在 profile 的 cordis.patch.yml 中寫入初始種子(與持久化文件並存時,以 $DSH_HOME/share-webui.json 爲準):
- id: share-webui
name: dsh-share-webui
config:
fixedPort: 30800 # 首次運行端口;0 關閉固定入口
fixedHost: 127.0.0.1 # 強制單一綁定接口(替代按主機分別監聽)
access: pair # pair(默認)或 open
trustLoopback: true # 置於 tunnel/反代後時可設爲 false
hosts:
- loopback
- tailscale
hosts 支持關鍵字 loopback、lan、tailscale、any(及 *)或字面 hostname。
安裝與啓用¶
Desktop 環境從 GitHub 安裝:
dsh plugin --profile desktop add github:vantoo/dsh-share-webui
本地開發可用 link: 指向絕對路徑。安裝後需重啓應用。若使用 dsh web profile,將 --profile desktop 換爲 --profile web。
典型用法¶
- 安裝插件並重啓 DSH。
- 打開 Settings → Web sharing,按需設置 Fixed port 與 Allowed hosts,選擇 Host,複製 Fixed entry 用於書籤或手機瀏覽器。
- 若從 LAN 或 Tailscale 訪問,在主機設置頁生成配對碼,在遠端設備打開固定入口並完成配對。
- 若經 Cloudflare tunnel 暴露,在設置頁填寫 team domain、AUD tag、公網 hostname 並啓用 Cloudflare Access,再按 README 中的 Setup 步驟在 Zero Trust 側創建應用。
需要本會話真實 URL(含 launch token)時,使用 Session link 複製即可;固定入口則在內部完成 token 握手。
適用場景與注意¶
- 適合:需要在 Desktop 或
dsh web下長期保留同一 Web GUI 地址、在局域網或 Tailscale 上用第二設備訪問、或配合 tunnel 與 Cloudflare Access 做受控暴露的 DSH 用戶。 - 安全:固定入口背後是已認證會話——進入者即控制當前 harness(工具、文件等),因此默認配對。插件在當前 dsh 進程權限下運行;安裝前請自行審閱 源碼 與 MIT 許可證,勿在未理解風險時勾選 Any host 或
access: open。 - 代理:Cloudflare JWT 校驗直連
https://<team>/cdn-cgi/access/certs,忽略系統代理;主機若僅能經代理上網,校驗會失敗(關閉而非放行)。
結尾¶
dsh-share-webui 解決的是「每次重啓 URL 都變」這一具體痛點:固定端口、可選監聽範圍、設置頁內切換與複製鏈接,並以配對(及可選 Cloudflare Access)約束非本機訪問。進一步瞭解可訪問目錄頁 skillhub.cn/plugins/vantoo/dsh-share-webui 與倉庫 github.com/vantoo/dsh-share-webui。