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 倉庫。

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

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

小夜