前言¶
在 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 倉庫。