DSH 网页端登录门插件:账号口令或共享令牌认证、会话 cookie、登录限速,附用户管理 CLI(0.4.1 起声明 dsh.bundle manifest,`dsh plugin add` 一键挂载)。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-auth-gate
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:TecFancy/dsh-auth-gate
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
English | 简体中文
给 DeepSeek Harness(dsh)网页版加一道登录门。部署到 公网 dsh 实例前面之后,不登录就没人能碰到你的 agent、聊天会话和 LLM 凭证。
它能做什么
所有访问都要先登录。 每个页面、每个 API 调用、每条 WebSocket 连接都会检查; 没有有效会话的访客会被带到简单的登录页(API/脚本请求则返回
401)。两种登录方式(配置里二选一):
- 密码(推荐):每个管理员一个用户名和密码。
- 令牌:整个实例共用一个秘密令牌。
浏览器和脚本都能用。 浏览器走登录页;脚本和 curl 直接带
Authorization: Bearer <token>就能跳过登录页。默认就安全。 密码只存哈希、登录有限速(反复输错会临时锁定该地址)、会话 cookie 带安全属性,而且配置缺失或损坏时拒绝访问而不是悄悄开门。
一个管理用户的小命令行工具:
dsh-auth user add admin --password-stdin # 添加用户 dsh-auth user list # 查看用户 dsh-auth user disable admin # 禁止某用户今后登录
快速开始
# 1. 从 npm 装进你的 dsh profile。
# 0.4.1 起包声明了 dsh.bundle manifest,`dsh plugin add` 会同时自动注册挂载
# (dsh.profile.bundles),无需手动写挂载行:
dsh plugin --profile web add dsh-auth-gate
# 2. 创建管理员账号
printf '%s\n' '选一个强密码' | dsh-auth user add admin --password-stdin
# 3. 开启密码登录:在 $DSH_HOME/cordis.patch.yml 里覆盖插件配置
# (仓库自带现成配置覆盖模板 deploy/cordis.patch.yml,见下方"配置"——挂载本身
# 不需要手动 patch 行)
# 4. 重启 dsh,打开你的站点——会先要求登录。
效果预览
未登录的访客会被带到登录页:

登录后进入你的实例:

配置
bundle 挂载行(id dsh-auth-gate,由 dsh plugin add 自动插入)使用默认配置:
mode: "token",由 DSH_AUTH_TOKEN 环境变量提供共享秘密。要改配置,在
$DSH_HOME/cordis.patch.yml(或 profile 的 cordis.patch.yml)里按 id 覆盖——
仓库自带现成覆盖模板 deploy/cordis.patch.yml。注意:覆盖条目不要带 insert
(否则会二次挂载插件),只覆盖 config:
- id: dsh-auth-gate
config:
mode: "password" # "password"(推荐)或 "token"
cookieSecure: true # 使用 https 时保持 true
| 选项 | 默认值 | 作用 |
|---|---|---|
mode |
"token" |
"password" = 用户名密码登录;"token" = 一个共享秘密 |
sessionTtl |
604800 |
一次登录持续多久(秒),到期需重新登录 |
cookieName |
dsh_auth |
会话 cookie 的名字(很少需要改) |
tokenRef |
"DSH_AUTH_TOKEN" |
仅令牌模式:共享秘密存在哪个环境变量里 |
cookieSecure |
true |
只在纯 http 测试环境设为 false |
usersFile |
"" |
密码模式:用户列表文件位置。默认 $DSH_HOME/auth/users.yaml |
部署
- 反代部署指南 —— Caddy/nginx 配置、浏览器信任栅栏的坑
(反代后设置页
403,以及为什么只加认证修不了它)、推荐的半外壳拓扑。 - docs/deployment_zh.md —— 运维清单、验收步骤(A–I)与故障诊断。
环境要求
- 服务器上需要 Node ≥ 22.19 和 pnpm。
- dsh 的
webprofile 正常运行(dsh --profile web)。 - 如果
cookieSecure是true,站点必须走 https(浏览器在纯 http 下会拒绝安全 cookie)。
许可证
注意事项与局限
- 禁用用户只阻止新登录;已经登录的会话要等它自然过期。
- 登录限速在服务器重启后清零。
- 反代部署时,限速按反代出口地址统计。
- dsh 界面里还没有登出按钮——访问
/auth/logout?next=/即可登出。 - 本插件只保护 dsh 的网页入口,不能替代服务器层面的安全:请保持服务器系统用户最小权限、
配置文件私密(
.credentials.yaml和auth/users.yaml创建时即为0600权限)。
链接
同类插件
strukto-ai/mirage#dsh★ 3447
把文件系统与 bash 提供者换成 mirage 虚拟工作区:文件工具与 shell 命令作用于挂载的资源(RAM、S3、Redis、Slack、Gmail、Notion、Postgres)而非宿主磁盘,支持按挂载点设置读/写/执行模式、按命令选择沙箱(进程内 monty、pyodide、quickjs;远程 docker、e2b、daytona),并可在虚拟终端中安装 CLI(git、gh、slack、linear、ntn、gws,或自行注册的程序树)作为命令头词。
hust-open-atom-club/oh-dsh★ 196
社区发行版:TUI、桌面端与 Web UI 统一体验,分层安装、一步到位。
Jayden-X-L/forkprobe★ 66
同一任务并行试跑多个技能,对比结果选出最优。
vlln/plugin-registry★ 43
插件生态基建:浏览器面板管理官方 repository 插件(0 patch)+ make-dsh-plugin 插件开发引导技能。
forrestchang/dsh-multica-runtime★ 37
让 dsh 运行时跑在 Multica 上。
omdsh-dev/dsh-plugin-check★ 20
插件健康检查:扫描清单协议/patch 格式/构建陷阱,零依赖只读。