前言¶
跑 DSH 的機器上通常不止一個 agent 在工作,憑據也不止存在一處:~/.gitconfig 裏的 url.*.insteadOf、~/.netrc、~/.npmrc、各項目 .git/config、隨手寫的 .env,都可能帶着 token。git 把 https://oauth2:<token>@host 嵌進 remote 後,任何一次 git remote -v 都可能把密鑰寫進日誌、對話記錄或 CI 輸出。逐個手工檢查費時,而且容易漏。
下面介紹的 dsh-fleet-audit 就是一把只讀的體檢刀:掃描本機憑據文件的權限位和 git remote 裏內嵌的憑據,把結果脫敏輸出。它不修文件、不髮網絡請求,只報告。
這是什麼¶
dsh-fleet-audit 是 DSH 的社區插件,定位是 agent 艦隊(fleet)的機器衛生審計,檢查三件事:憑據文件權限、git remote 內嵌憑據、provider token 前綴字面量。按 README 的說法,它是隻讀、零依賴、確定性的:同一份輸入每次產出的結果一致。
倉庫爲 YaoleWu/dsh-fleet-audit,分類屬於 admin-security。需要說明一點:README 正文裏的安裝命令與許可證署名寫的是 LeslieWylie,與倉庫所在屬主不一致,安裝前建議自己點開 GitHub 覈對一遍。README 也寫明這是獨立社區插件,與 DeepSeek 官方及其 DSH 倉庫沒有隸屬關係。
安裝與啓用¶
README 給出的本地驗證方式是先加本地路徑:
dsh plugin --profile web add /path/to/dsh-fleet-audit
發佈後的安裝形式按 README 寫法爲:
dsh plugin --profile web add dsh-fleet-audit
或走 GitHub:
dsh plugin --profile web add github:LeslieWylie/dsh-fleet-audit
注意最後一條裏的屬主名來自 README 原文,與倉庫 URL 的屬主不一致,執行前請自行確認指向正確的倉庫。
裝完重啓 dsh web,然後直接對它說「審計一下本機憑據衛生 / run fleet_audit」即可。
核心功能¶
1、憑據文件權限。列出常見憑據文件,包括 ~/.gitconfig、~/.netrc、~/.npmrc、~/.env、~/.ssh/,把期望權限收緊到 600 / 700;凡是組或其他用戶還能讀的,一律標記爲 tooOpen。
2、git remote 內嵌憑據。掃描 ~/.gitconfig 以及指定目錄下的 .git/config,識別 https://user:pass@host、https://oauth2:TOKEN@host、token 型用戶名這幾種形態。輸出的 URL 中憑據部分一律替換成 ***,README 稱這是逐字節保證不泄露原文,測試裏同時斷言輸出 JSON 不含原始密鑰。
3、provider token 前綴字面量。識別 github、github-fine-grained、gitlab、gitlab-ci、slack、aws、openai、jwt 這幾類常見前綴,只報告「類型 × 出現次數」,不輸出具體值。這項可以通過參數關掉。
工具參數¶
工具參數就是上面三件事的開關和邊界:
| 參數 | 類型 | 說明 |
|---|---|---|
roots |
string[] | 遞歸掃描 .git/config 的目錄(可選;默認只查 ~/.gitconfig) |
files |
string[] | 額外要查權限的憑據文件絕對路徑 |
scanSecrets |
boolean | 是否掃描 token 前綴字面量(默認 true) |
maxGitConfigs |
number | git config 掃描上限(默認 200,上限 2000) |
maxDepth |
number | 目錄遞歸深度(默認 5,上限 20) |
只關心某個項目的 remote 時,把項目目錄放進 roots 就行;清單之外的憑據文件用 files 顯式指定。
輸出示例¶
輸出是單個 JSON,summary 給總數,checks 分三組。下面取 README 的示例(已脫敏):
{
"ok": true,
"summary": { "files": 5, "tooOpen": 1, "gitLeaks": 2, "secretFiles": 1, "issues": 4, "scannedGitConfigs": 12 },
"checks": {
"credentialFiles": [
{ "path": "/Users/alice/.gitconfig", "exists": true, "mode": "644", "tooOpen": true }
],
"gitRemoteLeaks": [
{ "file": "/Users/alice/code/proj/.git/config", "host": "gitlab.example.com", "maskedUrl": "https://***:***@gitlab.example.com/group/proj.git" }
],
"secrets": [
{ "file": "/Users/alice/.gitconfig", "providers": [ { "provider": "github", "count": 1 } ] }
]
},
"note": "Read-only audit; secret-like values are masked in the output. Fix permissions with chmod 600 and rotate any exposed credentials."
}
note 字段直接寫着修復方向:權限用 chmod 600,泄漏的憑據要輪換。插件本身不會替你做這兩件事。
安全邊界與已知侷限¶
安全邊界寫得很明確:只讀,不寫文件、不啓進程、不訪問網絡、不保存狀態;git config 數量與遞歸深度都有上限,掃描規模是可控的。
侷限也要一併知道:
1、只掃文本類配置文件,加密存儲、系統鑰匙串和二進制文件不在範圍內。
2、token 前綴識別是啓發式規則,可能漏報非常規前綴,也可能誤報,需要人工複覈。
3、默認憑據清單是固定的,別的路徑要靠 roots / files 顯式指定。
4、發現泄漏後要自己執行 chmod 600 並輪換密鑰。
適用場景與注意事項¶
適合在跑多個 agent 的開發機、CI runner、共享工作機上做定期體檢,尤其是多人共用機器、又不能用受管憑據方案的情況。它是一次快照,不替代憑據管理工具,也不能保證你的 agent 配置裏沒有其他形式的密鑰落地。
有一點需要提醒:插件以當前 dsh 進程的權限運行,能讀到什麼就取決於這個進程能讀到什麼。安裝前請打開源碼看一眼掃描範圍與輸出邏輯,確認許可證可接受(README 標註爲 MIT)。
回滾方式同樣是插件命令,插件只讀且無狀態,卸載不影響用戶數據:
dsh plugin --profile <p> remove dsh-fleet-audit
# 或從 dsh.profile.bundles 刪除該行
小結¶
dsh-fleet-audit 的價值在於把「憑據散落在哪、誰能讀、有沒有帶密鑰」這三類問題收斂成一次只讀、脫敏的掃描,接入成本低,退出也沒有殘留。要自己試,先看源碼再裝。
目錄頁:https://www.skillhub.cn/plugins/YaoleWu/dsh-fleet-audit
GitHub:https://github.com/YaoleWu/dsh-fleet-audit