dsh-remote-link:把 DSH Web UI 安全暴露到局域網,並支持 agent 會話分叉

前言

DeepSeek Harness(DSH)的官方 Web UI 通常適合在本機迴環環境下使用。如果希望從手機或局域網設備訪問電腦上的 agent,直接把 Web UI 暴露出去會引入認證、會話、設備管理和權限暴露等問題。

dsh-remote-link 提供的是一個折中做法:插件在獨立網關端口上先做認證,再把請求反向代理回 loopback 的 DSH 官方 Web UI,同時給模型增加 fork_session 會話分叉工具。

這是什麼

dsh-remote-link 是一個 DSH 插件,維護者爲 BotonJ,許可證爲 MIT。

它主要解決三件事:

  1. 將 DSH 官方 Web UI 通過獨立網關端口認證並反向代理到 loopback。
  2. 讓手機掃碼配對後訪問電腦上的 agent。
  3. 爲模型增加 fork_session 會話分叉工具。

插件描述爲“零核心改動、零運行時依賴”。

核心能力

下面介紹插件的主要能力。

網關認證與反向代理

插件在獨立網關端口上做認證,並把請求反向代理到 loopback 上的 DSH Web UI。這樣,外部客戶端經過網關認證後才能訪問原本僅在本機迴環上暴露的界面。

配對與會話

插件使用一次性配對與會話機制:

  • QR 一次性配對
  • HMAC 挑戰-響應
  • HttpOnly Cookie 會話
  • 設備註冊表

配對完成後,後續訪問走會話 Cookie,而不是在地址欄攜帶長期憑據。

狀態頁

插件提供 /status 狀態頁,可展示:

  • 鏈路狀態
  • 設備身份
  • keepalive RTT
  • 上游健康
  • 隧道心跳

宿主遙測

插件會調用:

/api/host.describe

並訂閱:

/api/events.host

用於獲取宿主側遙測信息。

發現與防護

插件還包含以下能力:

  • mDNS 廣播非 loopback 網關
  • Basic Auth 後備
  • 客戶端 IP 限速
  • 認證失敗封禁

fork_session

插件爲模型增加 fork_session 工具。該工具以最近一個已完成回合爲邊界創建子會話,讓模型在探索不同方向時不需要直接改動當前會話主線。

安裝與啓用

先在本地目錄中安裝插件:

dsh plugin --profile web add ./dsh-remote-link

安裝後,需要在 DSH 的 Web profile 補丁文件中配置 remote-link 相關項:

$DSH_HOME/profiles/web/cordis.patch.yml

可配置項包括 hostportpairingmdnspublicUrl 等。

啓動後,日誌中會打印一次性配對二維碼的 ASCII 形式,以及一個 6 位短碼。

手機可以直接掃碼完成配對;如果不能掃碼,也可以在任意設備上打開:

http://<IP>:3081/pair

然後輸入短碼。

需要注意一個安全限制:當網關綁定非 loopback 地址,同時又沒有設置密碼、也關閉了配對時,插件會拒絕加載。

典型用法

查看狀態頁

在桌面瀏覽器中打開:

http://127.0.0.1:<port>/status

可以查看網關運行時長、WS 連接、設備身份、keepalive、上游健康和隧道心跳等信息。

在聊天框中觸發遠程管理工具

插件把部分管理動作暴露成模型可調用的工具。

例如:

  • 對模型說“給我配對碼”,觸發 remote_qr
  • 對模型說“看看誰連過我 / 踢掉我的舊 iPad”,觸發 remote_devices list/revoke
  • 對模型說“分個叉試試別的方向”,觸發 fork_session,以最近一個已完成回合爲邊界創建子會話。

MiMo Code 獨立運行器示例

README 中給出了 MiMo Code 的獨立運行器模式。該模式先安裝 mimo/ 目錄中的 2 文件補丁,再運行上游服務與網關:

bun run packages/opencode/src/index.ts serve --hostname 127.0.0.1 --port 3000
node runner-gateway.mjs '' 3081 3000

該模式把本地 HTTP 上游放到網關後面,使手機掃碼後可以訪問對應服務。

安全邊界與注意

使用前需要明確幾個安全邊界。

插件運行權限

插件以當前 dsh 進程權限運行。安裝前建議先檢查源碼、配置項和 MIT 許可證,確認其符合你的安全要求。

網關認證是唯一信任邊界

網關會把 Host 頭重寫爲 loopback,以便請求進入 DSH 側。經過網關認證後,settings.*credentials.* 等特權 RPC 也可以被訪問。

因此,插件的安全邊界是網關認證本身,而不是“外部網絡不可訪問 DSH”這一假設。

會話 Cookie 爲:

HttpOnly
SameSite=Strict

服務端只保存 SHA-256 摘要。吊銷設備後,對應會話會立即失效。

短碼路徑的限制

6 位短碼屬於弱共享祕密。它的安全依賴:

  • 10/min 限速桶
  • 封禁窗
  • 5 分鐘一次性 TTL

不能把它理解成高熵長期憑據。

已知未解決風險

README 中列出了幾個已知未解決風險:

  • 局域網嗅探者可能複製 Cookie 後接管會話。
  • devices.json 中可能包含明文 deviceKey,文件權限爲 0600

候選能力

README 中標註的候選能力(審批離線推送 + 長期恢復碼)處於待審覈狀態,不應作爲已確認穩定能力使用。

鏈接

  • 目錄頁:https://www.skillhub.cn/plugins/BotonJ/dsh-remote-link
  • GitHub:https://github.com/BotonJ/dsh-remote-link
羽毛球分组比赛记分
小程序二维码

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

小夜