前言¶
用 DSH(DeepSeek Harness)做智能體開發時,dsh web 會在本機啓動瀏覽器界面。若想在局域網另一臺設備上打開同一界面,需要把服務綁定到 0.0.0.0。原版 @deepseek-ai/dsh-web-app/startup 出於安全考慮會硬拒絕 --host 0.0.0.0,遠程訪問這條路被堵死。
下面介紹社區插件 dsh-web-startup-auth:它替換原版啓動器,並配套用戶名/密碼認證,使 dsh web --host 0.0.0.0 在局域網場景下可用。
這是什麼¶
dsh-web-startup-auth 由 GDWhisper 維護,歸類爲 DSH 社區目錄中的「聯網工具」插件。它是一個 DSH bundle:安裝後通過 cordis.patch.yml 自動補丁原版啓動邏輯,無需手動改配置文件。
一句話定位:遠程 Web 啓動 + 用戶名/密碼認證,讓 DSH 瀏覽器界面可以在非迴環接口上暴露,同時用會話保護 API。
核心功能¶
遠程啓動¶
允許使用 --host 0.0.0.0,替代原版啓動器對該參數的硬性拒絕。
登錄與註冊¶
首次訪問引導設置管理員賬號密碼,之後進入登錄頁;界面風格與 DSH 黑白藍主題一致。登錄後下發籤名 cookie dsh_sid(14 天有效,HttpOnly + SameSite=Lax)。
API 保護¶
除 /api/auth/* 與 /login 外,所有 /api/* 路由及第三方插件 RPC 路由必須攜帶有效會話,否則返回 401 或拒絕握手。
設置面板¶
向 DSH 設置面板注入「認證」標籤頁,提供退出登錄與修改密碼。獨立入口 /api/auth/logout 可清除會話 cookie。
遠程場景修復¶
針對局域網 HTTP 訪問的兩個問題做了修補:
crypto.randomUUIDpolyfill——非安全上下文下該 API 缺失會導致 RPC 失敗。- 特權 API 迴環放行——DSH 將
settings.*、credentials.*等敏感域、authority: "loopback"的第三方 RPC channel 以及 WebSocket 事件流限制爲僅迴環 Host 可訪問;認證通過後本插件以迴環身份放行。
上游兼容(dsh ≥ rc.8)¶
遠程瀏覽器訪問時,設置面板依賴的前端 settings mirror 原本會報 settings are unavailable in this browser。本插件通過 webServer.tapIndex 注入腳本,在 connection 插件激活時將 connection.isLoopback 覆蓋爲恆 true,使 mirror 與配置 scope 以 host 模式創建,無需刷新頁面。
安裝與啓用¶
本插件是 DSH bundle,package.json 的 dsh.bundle.patch 聲明瞭隨包分發的 cordis.patch.yml。用 dsh plugin 安裝後,包會加入 profile 的 dsh.profile.bundles,補丁層自動生效。
從 npm registry 安裝(當前版本 0.1.2):
dsh plugin --profile web add dsh-web-startup-auth@latest
從源碼安裝:
git clone https://github.com/GDWhisper/dsh-web-startup-auth
cd dsh-web-startup-auth
npm install
npm run build
dsh plugin --profile web add .
dsh plugin 是 pnpm 轉發器,--profile <name> 必填;add . 會把當前目錄以 link: 方式裝進 profile。
啓動服務:
dsh web --host 0.0.0.0
安裝時已自動應用補丁,無需再用 --patch 疊加——重複疊加會把插件再插入一遍。
典型用法¶
- 瀏覽器訪問
http://<主機IP>:<端口>/。 - 首次訪問跳轉到
/login,顯示「設置管理員賬號密碼」註冊表單。 - 註冊成功後自動登錄進入主界面;之後訪問需登錄。
- 退出登錄或修改密碼:主界面設置面板 → 認證標籤頁。
憑據與會話密鑰保存在 ~/.dsh/web-auth.json:
- 密碼使用 scrypt(隨機鹽,64 字節)散列存儲。
- 會話 cookie 用隨機密鑰做 HMAC-SHA256 簽名。
忘記密碼時,在服務器本機執行:
dsh --profile web auth-reset
非交互方式:
dsh --profile web auth-reset --password <新密碼>
重置會輪換會話密鑰,作廢所有已簽發的會話。兜底方案是刪除 ~/.dsh/web-auth.json 並重啓,可重新註冊(同樣作廢所有會話,但需重啓服務)。
適用場景與注意¶
適合誰:需要在局域網內用手機、平板或另一臺電腦訪問 DSH Web 界面的開發者;需要在可信內網共享 DSH 會話的場景。
安全邊界(來自 README 安全說明):
- 本插件提供認證,不提供傳輸加密。明文 HTTP 下憑據與流量可被同網抓包,建議僅在可信內網使用,或在前方部署 HTTPS 反向代理。
- 會話 14 天有效;
dsh_sid是自包含簽名 cookie,泄露後 14 天內無法單獨吊銷。auth-reset或設置面板「修改密碼」會輪換會話密鑰,一次性作廢全部會話。 - 憑據未設置時任何訪問者都可註冊爲管理員。在把服務暴露到不可信網絡之前,請先完成首次註冊。
- 登錄失敗按客戶端 IP 限速:連續 5 次失敗鎖定 30 秒(純內存、無持久化);註冊要求密碼至少 8 個字符。
--trusted-host僅爲與原版 CLI 兼容而保留透傳,不參與本插件認證判斷——遠程客戶端一律需要有效會話。- 插件以當前
dsh進程權限運行;安裝前應檢查源碼與許可證(MIT)。
鏈接¶
- 社區目錄頁:https://www.skillhub.cn/plugins/GDWhisper/dsh-web-startup-auth
- GitHub 倉庫:https://github.com/GDWhisper/dsh-web-startup-auth