dsh-plugin-login-gate:爲 DeepSeek Harness 增加密碼登錄與 HTTPS 反向代理

前言

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 依賴。

安裝與啓用

安裝過程涉及獲取插件、註冊配置、生成證書及設置密碼。

  1. 獲取插件
    克隆倉庫到本地,或下載 zip 解壓。
    git clone https://github.com/Wayne036/dsh-plugin-login-gate.git
將插件目錄放入 dsh 可訪問的位置。
  1. 註冊到 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'
  1. 生成證書
    使用 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>"
  1. 設置密碼
    創建密碼文件,內容爲登錄密碼(明文)。
    echo '你的密碼' > C:/dsh/login-gate/password.txt
  1. 配置 pnpm-workspace(安裝依賴時可能需要)
    若安裝依賴 node-pty(dsh 終端能力)時遇到構建腳本被攔截的問題,在 dsh profile 目錄下創建或編輯 pnpm-workspace.yaml,放行構建腳本。
    allowBuilds:
      node-pty: true
  1. 重啓 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 後需重打補丁。
羽毛球分组比赛记分
小程序二维码

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

小夜