dsh-encrypt
DeepSeek Harness 的 WebUI 管理加密凭据插件
AI 分析
提供基于 AES-256-GCM 的凭据加密存储,支持免密登录时长配置、输错锁定及防泄漏遮蔽。适合对 API 密钥等敏感凭据有高安全保护需求的用户。
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:yauntyour/DSH-Encrypt说明文档
阅读完整 README ↗使用
全部操作在「设置 → 加密安全」完成(面板 id encryption):
| 操作 | 前置状态 | 效果 |
|---|---|---|
| 设置加密密码(输入两次,至少 8 个字符) | 明文 | 同一文件原地替换为密文文档,进程保持解锁 |
| 解锁 | 加密+锁定(重启后) | 校验密码摘要并派生密钥,立即恢复模型调用 |
| 修改密码 | 加密+解锁 | 全部条目在新密钥下重加密 |
| 免密登录时长(滑块) | 任意 | 0 = 每次都输密码;1–30 = N 天内免密;31 = 永远免密(均仅本机) |
滑块即改即存(松开即提交到 /api/credentials.config,只接受 localhost;刻度只显示「每次」与「永远」两头)。解锁成功后按当前滑块时长签发免密票据;改动滑块会作废旧票据,若当前已解锁则立即按新时长重新签发。打开 WebUI 时自动尝试免密解锁(localhost 专属),免密期间无需输密码;到期后回到密码解锁。非 localhost 访问始终需要输入密码,且不显示改密入口(后端同样强制)。
永远密文:设置密码后没有「移除密码」路径——文件永为密文。若凭证文件被人替换成明文,解锁状态下会被立即重新加密写回;若发生在锁定/重启期间,凭证解析暂停(面板显示警告),重新设置密码即恢复(原有凭证内容保留)。
解锁锁定:连续输错密码达到阈值(默认 5 次)后,解锁接口进入指数退避锁定——第 1 次锁定 30 秒,之后每次失败翻倍,上限 15 分钟;计数与截止时间持久化在状态文件里,重启进程不能清零。锁定期间面板显示剩余秒数并禁用解锁按钮,接口返回 429 + Retry-After;成功解锁即清零。
状态机:
set-password (restart) unlock
plain ──────────────────► encrypted+unlocked ──────► encrypted+locked ──► unlocked
▲ │ ▲ │
└────── clear-password ──────┘ └──────────── change-password ───────────┘
- 锁定期间:web 服务照常运行;继承环境中的凭证仍可解析,文件内凭证解析抛
VAULT_LOCKED,describe报告source: "locked"——设置页即是解锁入口 - 免密窗口:票据在签发时写入
issuedAt与days;days: -1永不失效。滑块改动会立即作废旧票据 - 忘记密码:设计上不可恢复(密码不落盘);恢复手段 = 删除
.credentials.yaml重新配置
配置项
config:
path: '' # 凭证文件绝对路径;未设置时取 $DSH_HOME/.credentials.yaml
dshHome: '' # Harness home(通常由运行时注入,无需手动设置)
allowEnvFallback: true # 允许继承环境与 .env 回退层
passwordEnv: DSH_CREDENTIAL_PASSWORD # 启动自动解锁的环境变量名
watch: true # 监听文件变化热重载
debounceMs: 100 # 热重载防抖(毫秒)
leakGuard: true # 凭证泄露检测与输出脱敏
leakMinMaskLength: 8 # 短于该长度的值不脱敏(避免误伤普通文本)
leakMaxMaskLength: 256 # 长于该长度的值不脱敏(流式回看窗口)
maxUnlockAttempts: 5 # 连续解锁失败触发锁定的阈值
lockoutBaseMs: 30000 # 首次锁定窗口(毫秒,之后指数翻倍)
lockoutMaxMs: 900000 # 锁定窗口上限(毫秒)
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
path | string | $DSH_HOME/.credentials.yaml | 凭证文件绝对路径(运行时注入 dshHome 计算默认值) |
dshHome | string | 运行时注入 | Harness home |
allowEnvFallback | boolean | true | 是否启用继承环境与 .env 回退层 |
passwordEnv | string | DSH_CREDENTIAL_PASSWORD | 启动自动解锁密码的环境变量名 |
watch | boolean | true | 是否监听文件热重载 |
debounceMs | number | 100 | 热重载防抖毫秒数(≥ 0) |
rememberDays | number | 0 | 免密登录天数:0 = 每次都输密码,1..30 天,-1 = 永远(补丁配置的初始值;滑块运行时值写入 $DSH_HOME/.dsh-encrypt.json 并优先生效) |
leakGuard | boolean | true | 泄露检测与输出脱敏总开关(关闭后 HTTP/WS 输出不再扫描) |
leakMinMaskLength | number | 8 | 参与脱敏的最小值长度(4–64;更短的值视为普通文本) |
leakMaxMaskLength | number | 256 | 参与脱敏的最大值长度(16–1024;同时是流式脱敏的跨块回看窗口) |
maxUnlockAttempts | number | 5 | 连续解锁失败多少次后进入锁定(≥ 1) |
lockoutBaseMs | number | 30000 | 首次锁定窗口毫秒数(≥ 1000;之后每次失败 ×2) |
lockoutMaxMs | number | 900000 | 锁定窗口上限毫秒数(≥ 1000) |