Wayne036/dsh-plugin-login-gate ↗★ 1
dsh-plugin-login-gate
DSH 网页界面的密码保护 HTTPS 登录闸门及局域网跨设备访问修复插件
AI 分析
为 DSH 提供密码登录验证、HTTPS 反向代理,并解决局域网访问时设置页 403 的问题。适合需要将本地 DSH 安全地暴露到局域网或多端协同使用的用户。
安装
此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗
说明文档
阅读完整 README ↗配置项
| 键 | 必填 | 默认 | 说明 |
|---|---|---|---|
host | 否 | 0.0.0.0 | 监听地址 |
port | 否 | 3081 | 监听端口(登录闸门入口) |
targetHost | 否 | 127.0.0.1 | 转发目标(dsh 所在地址) |
targetPort | 否 | 3080 | 转发目标端口(dsh Web UI 端口) |
passwordFile | 是 | - | 密码文件路径(明文) |
certFile | 是 | - | TLS 证书 PEM 路径 |
keyFile | 是 | - | TLS 私钥 PEM 路径 |
assetsDir | 否 | 包内 assets/ | 登录页素材目录(bg.jpg / logo.svg) |
maxSessions | 否 | 64 | 最大并发登录会话数(多端场景) |
配置缺失或文件不存在时,插件仅记录警告并跳过启动,不影响 dsh 本体。
本插件与 dsh 自身
webserver(默认127.0.0.1:3080)是两回事:插件作为 对外入口(如3081),dsh 本体保持仅本机可访问。建议 dsh 的webserver.host保持127.0.0.1,不要暴露到局域网,由本插件统一对外。
BUG 1:模型配置页报 HTTP 403(transport failure for /api/settings.describe)
- 根因:dsh 对
settings.describe等特权接口按请求头Host/Origin做信任判定,只接受回环(loopback)或--trusted-host指定的 authority。 反向代理把请求转发到127.0.0.1:3080时,若Host/Origin仍带着局域网 地址(如192.168.x.x:3081),就会被信任围栏拒绝,返回 403。 注意--trusted-host只覆盖「trusted-host 类」接口,无法覆盖「loopback 类」 接口,所以光加 trusted-host 不够。 - 修复(本插件已在代理层处理):见
lib/index.js的rewriteLoopbackAuthority(), 在把请求(含 WebSocket 升级)转发给 dsh 之前,把Host/Origin重写为目标 回环地址(127.0.0.1:3080)。你无需手动处理。
BUG 2:设置 / 模型配置页报 settings are unavailable in this browser
-
根因:这是纯前端判定,与上面的 403 是两回事。浏览器端
dsh-client-connection的isLoopbackHostname()只认localhost/127.x;connection.isLoopback由页面location.hostname算出。经局域网 IP 访问时isLoopback=false→ 设置镜像persistence="memory"→ 永不发起settings.describe→ 抛该错。 -
修复(本插件在启动时自动打浏览器侧补丁):
dsh-client-connection/lib/client.js的isLoopbackHostname()额外放行 私有网段(10/8、172.16/12、192.168/16、169.254/16)—— 即把局域网 IP 视为回环,使设置镜像改用host持久化、正常加载。dsh-client-ui-settings/lib/client.js把connection.isLoopback ? "host" : "memory"强制为"host"(双保险)。
-
补丁是侵入式的,改在 dsh 自家
node_modules内部文件里:⚠️ dsh 一旦更新 / 重装,这些补丁会失效,设置页会再次报 BUG 2。 因此本插件在
apply()启动时(最佳努力、幂等)自动重打; 若自动探测未命中,或你想手动确认,在 dsh 更新后执行一次即可:# 自动探测 dsh 安装目录(从 cwd / 插件位置向上回溯) node node_modules/dsh-plugin-login-gate/patch-dsh-lan.js # 或显式指定 dsh 根目录(最稳妥) node node_modules/dsh-plugin-login-gate/patch-dsh-lan.js C:/AI/deepseek-dsh # 等价写法: # DSH_ROOT=C:/AI/deepseek-dsh node node_modules/dsh-plugin-login-gate/patch-dsh-lan.js脚本特性:幂等(已打过则跳过)、不写死任何 IP / 密码、匹配不到模式就不动文件、 打前自动留
.lanpatch.bak备份。