前言¶
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 后需重打补丁。