前言¶
DeepSeek Harness(DSH)是一個面向本地桌面工作流的 AI coding agent runtime,默認圍繞 127.0.0.1 設計。一旦想把它開放給局域網裏的手機、平板,或者部署到雲服務器上,會接連碰到幾個障礙:
1、非 localhost 來源調用特權接口(如 settings.describe、llm.providers)會被 403 Forbidden 攔下,遠程切換模型做不了;
2、移動端瀏覽器在純 HTTP 環境下沒有 Secure Context,crypto.randomUUID 未定義,RPC 全部失敗;
3、對局域網或公網開放端口後沒有認證機制,同一網絡裏的任何人都能創建會話、通過 agent 執行命令。
dsh-plugin-auth-guard 針對的就是這組問題:綁定並暴露網絡、注入移動端 polyfill、在 TCP 層建一道默認拒絕的認證網關。下面介紹它的功能、安裝和配置。
這是什麼¶
dsh-plugin-auth-guard 是 DeepSeek Harness(DSH)的認證與訪問控制插件,作者 lijx122,MIT 許可,要求 Node.js >= 20。一句話定位:企業級零信任認證、局域網/公網訪問控制與安全網關插件。
DSH 的理念是一切皆插件,這個插件同樣以 bundle 形式接入:在 TCP 服務器層攔截 HTTP request 與 WebSocket upgrade 事件,構建默認拒絕(Default-Deny)零信任網關——不進白名單的請求,一律先過認證。
核心功能¶
網絡暴露與特權 RPC 代理¶
1、將 DSH Web GUI 綁定到 0.0.0.0:3080,並動態枚舉所有活躍的局域網 IPv4 接口;
2、爲已認證客戶端安全代理特權 RPC(settings.describe、llm.providers、credentials.*),消除 403 Forbidden;
3、通過 tapIndex 動態向 <head> 注入移動端 crypto.randomUUID polyfill,保證純 HTTP 下移動端正常工作。
默認拒絕網關¶
- 在 TCP 服務器層攔截 HTTP
request與 WebSocketupgrade事件; - 未認證訪問核心 RPC(
/api/*)、插件管理(/api2/*)、側邊欄路由(/sidebar/*)一律以 HTTP 401 阻斷,或直接銷燬 WebSocket。
憑據與令牌生命週期¶
- 密碼以 32 字節加鹽 Scrypt 哈希存儲,敏感配置字段以
.role('secret')聲明,防止明文外泄; - 使用
crypto.timingSafeEqual做常量時間校驗,防時序側信道攻擊; - HMAC-SHA256 令牌內嵌當前密碼指紋,修改密碼後毫秒級全局吊銷所有令牌;
- 修改密碼或登出時自動終止所有活躍的遠程終端/事件 WebSocket。
防僞造與限流¶
- 校驗
req.socket.remoteAddress,防止Host: 127.0.0.1僞造與代理迴環反轉; - IP 滑動窗口限流:連續失敗 5 次封禁 15 分鐘(HTTP 429),並帶自動垃圾回收;
- 全局突發限流:所有 IP 合計登錄頻率限制爲 40 req/min;
- 請求體超過 64KB 立即中斷,防止流式 OOM 拒絕服務;
- 基於嚴格主機名匹配的 CSRF 與跨站 WebSocket 劫持(CSWSH)防護。
界面與多標籤同步¶
- 遵循 DSH 設計系統(
--dsw-*CSS tokens、fish logo); - 鎖屏掛載於
document.body(z-index: 2147483647),加背景模糊防點擊穿透; - 基於
BroadcastChannel實現多標籤頁狀態即時同步。
安裝與啓用¶
官方提供三種方式。
方式一,DSH CLI(README 推薦):
dsh plugin --profile web add github:lijx122/dsh-plugin-auth-guard
方式二,DSH Web Marketplace:在 DSH Web GUI 依次進入 Settings → Plugins → Marketplace,搜索 auth-guard,點擊 Install。
方式三,本地鏈接(開發者模式):
1、把倉庫克隆到 ~/.dsh/plugins/dsh-plugin-auth-guard;
2、在 ~/.dsh/profiles/web/package.json 的 dependencies 中添加:
{
"dependencies": {
"dsh-plugin-auth-guard": "link:../../plugins/dsh-plugin-auth-guard"
}
}
3、把 dsh-plugin-auth-guard 追加到 dsh.profile.bundles,然後重啓 DSH。
配置入口¶
安裝後進入 Settings → Security & Access(安全與訪問),主要配置有四項:
- Require password for LAN/Remote access:非 localhost 來源訪問時要求密碼,默認啓用;
- Enforce authentication globally:對
127.0.0.1也強制認證,可選開啓; - Administrator Credentials:設置或修改管理員用戶名與密碼,密碼不少於 6 個字符;
- Active LAN IP Directory:即時列出所有監聽中的 LAN 地址,支持一鍵複製。
默認策略是隻對非 localhost 來源強制密碼認證;如果本機也要走認證,需要額外開啓全局認證選項。
反向代理部署¶
README 裏有一節「5 Essential Reverse Proxy Settings」,針對 Nginx / Caddy / Cloudflare 部署共給出 5 項設置。其中第 1 項是調大 Nginx 的 client_max_body_size:Nginx 默認 1MB,會以 413 拒絕圖片和文件上傳。其餘設置項請直接查看倉庫 README 的對應章節。
適用場景與注意事項¶
適合誰:
- 需要在手機/平板上通過局域網訪問 DSH Web GUI 的開發者;
- 把 DSH 部署在雲服務器、需要公網訪問的場景;
- 局域網環境不完全可信、希望對未認證請求默認拒絕的團隊。
注意事項:
1、插件默認只攔非 localhost 來源,127.0.0.1 需要手動開啓全局認證;
2、密碼最少 6 個字符;修改密碼後所有已發令牌立即失效,活躍的遠程終端連接也會被終止;
3、插件以當前 dsh 進程的權限運行,安裝前建議先檢查源碼與許可證(本項目爲 MIT);
4、運行環境要求 Node.js >= 20。
結尾¶
回顧一下:把 DSH 開放到局域網或公網,需要解決認證、防僞造、限流和移動端兼容這幾件事,dsh-plugin-auth-guard 把它們打包成了一個可直接安裝的 bundle,並在 TCP 層以默認拒絕的方式兜底。
- 倉庫地址:https://github.com/lijx122/dsh-plugin-auth-guard
- 社區目錄頁:https://www.skillhub.cn/plugins/lijx122/dsh-plugin-auth-guard (目錄爲獨立社區站點,與 DeepSeek / 幻方無官方從屬關係)