dsh-secret-form:用安全输入卡片收集密钥,不进对话上下文

前言

在 DSH 里跑终端命令或填网页时,智能体经常要处理密码、验证码、API 密钥。若把这些值写进工具参数或贴进聊天,会进入模型上下文和对话记录,后续泄露面更大。社区里也有插件只做「索取」或「投递」其中一段;dsh-secret-form 由维护者 kcgoofee-jpg 开发,分类为 admin-security,目标是把敏感值整条链路——索取、投递、展示——收进一张(或一组)安全卡片,让用户与 host 之间完成输入,值不进模型、不进对话。下面介绍它的定位、能力与安装用法。

这是什么

dsh-secret-form(GitHub:kcgoofee-jpg/dsh-secret-form)是 DeepSeek Harness 桌面端插件。README 写明:密码、验证码、密钥只在用户和 host 之间传递,不进模型上下文、不进对话记录。当前版本在 package.json 中为 0.3.0,许可证 MIT;插件目录星标为 0。保存、生成、管理凭据等能力在文档中标注为后续版本规划,现版侧重索取、投递与展示。

与同名不同项目:unera/dsh-secret-form(npm @dr-co/dsh-secret-form,一次性密钥链接)与本仓库无关,选用时注意仓库地址。

核心工具与选型

插件对外提供四类工具,按场景选用即可。

工具 场景
secret_exec 终端等待密码(sudo、passwd、ssh 私钥口令等)
secret_browser 网页表单填密钥(DSH 侧边栏浏览器或 Ego Lite)
secret_reveal 展示服务器/文件中已存在的密钥,模型读不到明文值
secret_ask 单次索取一个值,并指定存入凭据库(只回引用名)或写入 0600 临时文件(回路径)

文档中的选型口诀:要跑命令用 secret_exec;要填网页用 secret_browser(侧边栏已开该站用 engine: "dsh",否则 engine: "ego");要看已有密钥用 secret_reveal。secret_reveal 与「直接向终端/内置浏览器投递」在 COMPARISON.md 中说明暂无替代插件。

安装与启用

运行环境要求 DSH Desktop 版本满足 >= 0.2.2-rc.1 且 < 0.3.0(与 package.json 中 dsh.compatibility 一致);Node >= 20;仅支持 desktop profile。

在 DSH 中打开 Plugins → Add plugin,粘贴本插件目录的绝对路径即可完成安装。等价的手动步骤如下:

mkdir -p ~/.dsh/profiles/desktop/node_modules
cp -R /path/to/dsh-secret-form ~/.dsh/profiles/desktop/node_modules/dsh-secret-form

将 /path/to/dsh-secret-form 换成你本机上的实际路径。装完后重启 DSH,在 Plugins 页确认 dsh-secret-form 已启用。

安装前建议自行阅读仓库源码与 LICENSE,并记住:插件以当前 DSH 进程权限运行,能接触到的文件与网络范围与桌面进程一致。

三分钟上手示例

以下 JSON 片段来自 README,供智能体或工作流调用工具时参考。

终端要密码(secret_exec)

{
  "command": "ssh -t owl-new 'sudo passwd root'",
  "prompt": "为 owl-new 的 root 改密码",
  "label": "SSH + sudo",
  "rules": { "minLength": 12 }
}

网页登录(secret_browser)

{
  "engine": "dsh",
  "url": "https://github.com/login",
  "fields": [
    { "selector": "#login_field", "label": "账号" },
    { "selector": "#password", "label": "密码" }
  ],
  "submit_selector": "input[type=\"submit\"]",
  "verify_selector": "body",
  "autocomplete": "current-password",
  "prompt": "登录 GitHub"
}

查看已存密钥(secret_reveal)

{
  "command": "ssh owl-new 'cat /opt/service-tools/.env'",
  "prompt": "owl-lax 后台管理界面的环境变量",
  "label": "owl 服务器密钥",
  "format": "dotenv"
}

命令本身不能包含密钥明文;解析后的值只出现在卡片 UI,工具返回结果中为键名与脱敏输出。

终端提示识别与扩展配置

secret_exec 依赖 CLI 在输出尾部真实处于等待输入状态。内置词表覆盖英文 password、passphrase、otp、2fa code 及中文「密码」「验证码」「口令」等;spin:、hotspot: 等不会误把 pin 当触发词。

内置不够时,可在插件配置中增加最多 16 条正则,例如:

config:
  extraPromptPatterns:
    - 'enter\s+(?:the\s+)?unlock\s+code'
    - '解锁口令'

secret_browser 要点

必填 prompt;单字段用 selector,多字段用 fields 数组(按顺序各弹一张卡)。engine 默认为 dsh(侧边栏 webview);url 在 dsh 下用于匹配站点,在 ego 下会先导航。submit_selector、verify_selector 分别用于提交与校验成功文案。autocomplete 支持 current-password、new-password、one-time-code 等。

非密钥字段可在 fields[] 设 secret: false,卡片按普通文本框处理。选择器支持标准 CSS,以及 >> nth=N、:has-text()、:text-is() 等扩展。rules 由调用方传入(如 minLength、requireDigit),不满足则禁用提交并显示强度提示。

侧边栏未开且 engine: "dsh" 找不到 webview 时,会回退 Ego Lite,并在结果首行说明换了引擎。

secret_reveal 与 secret_ask

secret_reveal 必填 command 与 prompt;format 可选 auto、dotenv、json、lines;keys 可限制展示的键名。卡片支持逐项查看明文、复制或全部复制。命令中途若要密码(如 ssh 私钥口令),仍走同一套输入卡流程。

secret_ask 必填 prompt / label;deliver 默认为 vault(存 ~/.dsh/.credentials.yaml 的 refs:,工具只回引用名 ref),或 file(0600 临时文件、回路径,约 20 分钟后删除)。文档建议:能用 vault 就别用 file,后者是为 askpass 等必须读文件的降级路径。

复用凭据与安全边界

secret_exec 可加 credential: "TAVILY_API_KEY":终端要密码时先从凭据库取,成功则直接写入(只试一次,失败再弹卡)。secret_browser 的 fields[] 同样支持 credential,对应栏不弹卡。

安全相关约定(摘自 README):

  1. command、prompt、label 会进入工具记录,不要把密钥写进这些参数。
  2. 用户输入经同源 POST 到 host,内存驻留、no-store;返回前按已知值脱敏。
  3. 勾选保存到凭据库会写入 ~/.dsh/.credentials.yaml;DSH 设置页无凭据 UI,删除需手改该文件。
  4. 单次执行最长 10 分钟,单条提示最长等待 600 秒,默认最多 8 次提示(maxPromptCount 可调至 20)。

结尾

若你希望在 DSH 里统一处理「终端 passwd / 网页登录 / 只读展示 .env」而不让敏感值进入对话,dsh-secret-form 用四组工具把链路接上,并依赖桌面版安全输入卡片完成交互。插件介绍与分类见社区目录 skillhub.cn/plugins/kcgoofee-jpg/dsh-secret-form;源码与完整参数说明见 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye