前言¶
在 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):
command、prompt、label会进入工具记录,不要把密钥写进这些参数。- 用户输入经同源 POST 到 host,内存驻留、
no-store;返回前按已知值脱敏。 - 勾选保存到凭据库会写入
~/.dsh/.credentials.yaml;DSH 设置页无凭据 UI,删除需手改该文件。 - 单次执行最长 10 分钟,单条提示最长等待 600 秒,默认最多 8 次提示(
maxPromptCount可调至 20)。
结尾¶
若你希望在 DSH 里统一处理「终端 passwd / 网页登录 / 只读展示 .env」而不让敏感值进入对话,dsh-secret-form 用四组工具把链路接上,并依赖桌面版安全输入卡片完成交互。插件介绍与分类见社区目录 skillhub.cn/plugins/kcgoofee-jpg/dsh-secret-form;源码与完整参数说明见 GitHub 仓库。