SodaZheng/dsh-totp0

dsh-totp

TOTP-only access control for DeepSeek Harness Web, with in-app enrollment, recovery codes, live protection controls and lock-all.

包名
dsh-totp
版本
0.0.3
许可证
MIT
最近更新
2026年9月10日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:SodaZheng/dsh-totp

为什么使用它

你想解决的问题dsh-totp 提供的能力
不希望别人知道地址就能进入 DSH开启保护后,本机、内网和公网访问同一入口都需要动态码
不想维护另一套账号或登录站点在 DSH 的「设置 → 访问验证」中扫码绑定
希望自己决定什么时候启用验证首次安装默认关闭,绑定成功后开启,之后可随时切换
暂时离开时希望立即收回访问权限一键锁定所有已授权页面和设备,无需再输入动态码
担心换手机后无法访问提供一次性恢复码和验证器更换流程
不希望绑定完成后再等一轮验证码当前绑定页保持可用,保存恢复码后直接继续使用

日常使用

操作如何操作结果
进入 DSH保护开启时,打开或刷新页面并输入动态码获得当前页面的临时访问授权
开启 / 关闭保护在设置页点击开关,输入一组新的动态码确认立即生效,旧页面授权撤销;关闭后可直接访问
锁定所有设备点击对话页右下角的「锁定」,或设置页的「锁定所有设备」当前页和其他已授权页面立即锁定,无需动态码
更新恢复码在设置页点击「更新恢复码」,输入新的动态码生成 10 个新恢复码,旧恢复码失效
更换验证器验证当前动态码,再扫描新二维码并确认新动态码新验证器生效;当前页面可继续使用,其他页面重新验证

锁定按钮的状态:

  • 未绑定验证器:置灰,提示先到设置页绑定。
  • 已绑定但保护关闭:置灰,提示先到设置页开启保护。
  • 已绑定且保护开启:可直接锁定,无需再次验证。

锁定会关闭访问连接,插件不会主动取消 DSH 后台任务。具体任务在连接中断后的行为仍由 DSH 和所用插件决定。

手机不可用时

在登录页点击 无法使用验证器,输入一个未使用过的恢复码,然后重新绑定验证器。

恢复码验证成功后,旧验证器和旧页面授权立即失效。在新验证器确认前,恢复授权仅允许绑定,不能访问 DSH 数据。确认新动态码并保存新恢复码后,可以直接进入 DSH,无需再登录一次。

每个恢复码只能使用一次。更新恢复码或成功换绑后,请用新的恢复码替换旧备份。

配置与本机管理

展开查看配置、数据目录和本机命令

可选配置

可在对应 profile 的 cordis.patch.yml 中配置:

- id: dsh-totp
  config:
    host: '0.0.0.0'
    port: 3080
    allowedHosts:
      - 'dsh.example.com:3080'
    idleMs: 900000
    maxMs: 28800000

修改监听地址、端口或数据目录需要重启;页面内的保护启停和锁定立即生效。

DSH 会通过插件导出的 Config 校验配置。host 支持 127.0.0.10.0.0.0port 为 0–65535 的整数(0 表示动态端口);idleMs 不得大于 maxMs,两者为正整数且最长不超过 24 小时。allowedHosts 填写 host[:port],不带协议或路径。

数据目录

默认依次使用 DSH_TOTP_DATA_DIR$DSH_HOME/dsh-totp~/.dsh/dsh-totp。插件配置的 dataDir 可覆盖默认路径。

每个数据目录只允许一个运行中的插件实例。多个 DSH 实例应使用不同目录。普通重启保留绑定和保护状态,但不保留页面授权。

本机命令

在本仓库目录执行:

node src/cli.js status
node src/cli.js doctor
node src/cli.js enable
node src/cli.js disable
node src/cli.js lock

这些是持有本机管理权限的恢复与运维入口,不要求手机动态码。lock 命令会开启保护并锁定所有页面,因此与保护关闭时置灰的网页按钮不同;未绑定时不能开启保护。

可附加 --data-dir /path/to/data。本机命令必须与插件使用同一数据目录。它们不支持扫码绑定或换绑。

可选配置

可在对应 profile 的 cordis.patch.yml 中配置:

- id: dsh-totp
  config:
    host: '0.0.0.0'
    port: 3080
    allowedHosts:
      - 'dsh.example.com:3080'
    idleMs: 900000
    maxMs: 28800000

修改监听地址、端口或数据目录需要重启;页面内的保护启停和锁定立即生效。

DSH 会通过插件导出的 Config 校验配置。host 支持 127.0.0.10.0.0.0port 为 0–65535 的整数(0 表示动态端口);idleMs 不得大于 maxMs,两者为正整数且最长不超过 24 小时。allowedHosts 填写 host[:port],不带协议或路径。