前言¶
DeepSeek Harness (dsh) 的 Web UI 默認沒有登錄頁,且僅允許迴環地址訪問。當需要將 dsh 暴露給局域網或其他設備時,直接訪問存在安全隱患。本插件在 dsh 前置一道密碼登錄閘門,並提供 HTTPS 反向代理功能,同時修復了局域網跨設備訪問時的部分已知問題。
核心功能¶
- 密碼登錄:支持單密碼場景,密碼文件明文存儲,修改即時生效。
- HTTPS 自籤:使用自簽證書加密傳輸,瀏覽器提示後可繼續訪問(與常見 NAS 體驗一致)。
- 協議跳轉:輸入
IP:端口訪問 http 時自動跳轉至 https。 - 會話安全:使用 httpOnly Cookie,會話存儲於內存,瀏覽器關閉即失效。
- 流式能力:完整轉發 SSE / WebSocket,不影響 dsh 的實時輸出與會話列表。
- 同端口雙協議:單一端口同時處理 HTTP 跳轉與 HTTPS 服務。
- 零依賴:僅依賴 peer 依賴
@deepseek-ai/cordis,無運行時 npm 依賴。
安裝與啓用¶
安裝過程涉及獲取插件、註冊配置、生成證書及設置密碼。
- 獲取插件
克隆倉庫到本地,或下載 zip 解壓。
git clone https://github.com/Wayne036/dsh-plugin-login-gate.git
將插件目錄放入 dsh 可訪問的位置。
- 註冊到 profile
編輯 dsh 的cordis.patch.yml(如~/.dsh/profiles/web/cordis.patch.yml),追加配置。若插件未安裝到node_modules,可將name指向插件目錄的絕對路徑。
- insert:
- id: login-gate
name: 'dsh-plugin-login-gate'
config:
port: 3081
passwordFile: 'C:/dsh/login-gate/password.txt'
certFile: 'C:/dsh/login-gate/cert.pem'
keyFile: 'C:/dsh/login-gate/key.pem'
assetsDir: 'C:/dsh/login-gate/assets'
- 生成證書
使用 openssl 生成自簽證書(有效期 10 年)。
openssl req -x509 -newkey rsa:2048 \
-keyout key.pem -out cert.pem -days 3650 -nodes \
-subj "/CN=DeepSeek-Harness-Login" \
-addext "subjectAltName=IP:127.0.0.1,DNS:localhost,IP:<你的局域網IP>"
- 設置密碼
創建密碼文件,內容爲登錄密碼(明文)。
echo '你的密碼' > C:/dsh/login-gate/password.txt
- 配置 pnpm-workspace(安裝依賴時可能需要)
若安裝依賴node-pty(dsh 終端能力)時遇到構建腳本被攔截的問題,在 dsh profile 目錄下創建或編輯pnpm-workspace.yaml,放行構建腳本。
allowBuilds:
node-pty: true
- 重啓 dsh
重啓 dsh Web UI,瀏覽器訪問http://<IP>:<port>,應自動跳轉至 https 登錄頁。
配置項¶
| 鍵 | 必填 | 默認 | 說明 |
|---|---|---|---|
host |
否 | 0.0.0.0 |
監聽地址 |
port |
否 | 3081 |
登錄閘門入口端口 |
targetHost |
否 | 127.0.0.1 |
轉發目標地址 |
targetPort |
否 | 3080 |
dsh Web UI 端口 |
passwordFile |
是 | - | 密碼文件路徑(明文) |
certFile |
是 | - | TLS 證書 PEM 路徑 |
keyFile |
是 | - | TLS 私鑰 PEM 路徑 |
assetsDir |
否 | 包內 assets/ |
登錄頁素材目錄 |
maxSessions |
否 | 64 |
最大併發登錄會話數 |
lanPatch |
否 | false |
局域網跨設備訪問修復開關 |
局域網跨設備訪問修復¶
本插件針對局域網訪問時的三類已知問題進行了修復。
BUG 1:模型配置頁報 HTTP 403¶
原因:dsh 的信任圍欄檢查請求頭的 Host / Origin,反向代理轉發時若攜帶局域網地址會被拒絕。
修復:插件在代理層自動重寫 Host / Origin 爲迴環地址,無需手動處理。
BUG 2:設置頁報 settings are unavailable¶
原因:瀏覽器端 isLoopback 判定僅支持 localhost / 127.x,導致設置頁鏡像使用 memory 持久化。
修復:開啓 lanPatch 後,插件會在啓動時自動打補丁,將私有網段 IP 判爲 isLoopback。此補丁僅修改客戶端派生狀態,不影響服務端信任圍欄。
BUG 3:WebSocket 握手失敗¶
原因:轉發 WebSocket 升級時,Upgrade / Connection 頭被剝掉,導致 RFC 6455 校驗失敗,事件流無法建立。
修復:轉發 101 響應前自動補回這兩個頭。
補丁說明¶
lanPatch 默認關閉。開啓後,插件會修改 dsh 的 node_modules 內部文件以打補丁。dsh 更新或重裝後補丁會失效,需重新運行:
node node_modules/dsh-plugin-login-gate/patch-dsh-lan.js
安全說明¶
- 密碼存儲:密碼以明文形式存儲在本地文件中,請確保文件權限僅當前用戶可讀寫。
- 證書信任:自簽證書不被瀏覽器信任,請勿將此入口暴露到公網,僅限局域網/內網使用。
- 會話管理:會話存儲於內存,dsh 重啓後所有設備需重新登錄。
已知限制¶
- 單密碼、無多用戶體系。
- 無登錄失敗鎖定機制。
- 自簽證書 10 年有效期,到期需重新生成。
lanPatch修改 dsh 源碼,更新 dsh 後需重打補丁。