前言¶
多 agent 时代的开发机上,凭据散落在 ~/.gitconfig、agent 配置、.git/config 和各种 .env 里。git 的 url.*.insteadof 或 pushurl 一旦嵌了 token(例如 https://oauth2:<token>@gitlab.example.com/...),任何一次 git remote -v 都会把密钥打印进日志、对话或 CI。
以往的做法是手工逐个检查文件权限、grep 一遍 remote 配置,费时且容易漏。dsh-fleet-audit 把这件事做成了 DSH 里的一条指令:一键只读审计,输出全程脱敏。DSH 的理念是「一切皆插件」,这类安全基线体检正适合以插件形式挂进来。下面介绍这个插件的定位、功能、安装与用法。
这是什么¶
dsh-fleet-audit 是一个 DSH agent 舰队卫生审计插件,由 LeslieWylie 维护,当前版本 0.0.1,采用 MIT 许可证。它只做三件事:检查凭据文件权限、扫描 git remote 中内嵌的凭据、识别常见 provider token 前缀字面量。整个插件只读、零依赖、确定性,发现问题时只报告,不修改任何文件。
核心功能¶
凭据文件权限检查¶
检查 ~/.gitconfig、~/.netrc、~/.npmrc、~/.env、~/.ssh/ 等常用凭据文件的权限。这类文件应收紧为 600/700,只要组或其他用户可读,就标记为 tooOpen。
git remote 内嵌凭据扫描¶
扫描 ~/.gitconfig 与给定目录下的 .git/config,识别 https://user:pass@host、https://oauth2:TOKEN@host、token 型用户名等内嵌凭据。输出中 URL 里的凭据部分以 *** 掩码,逐字节保证不泄露原文。
provider token 前缀字面量扫描¶
按 github / github-fine-grained / gitlab / gitlab-ci / slack / aws / openai / jwt 等常见前缀做字面量扫描,只报「类型 × 出现次数」,不输出内容本身。这项检查可通过 scanSecrets 参数关闭。
安全边界¶
- 只读:不写文件、不启进程、不访问网络、不保存状态。
- 脱敏:所有疑似凭据一律掩码,测试同时断言输出 JSON 不含原始密钥。
- 有界:git config 数量(默认 200,上限 2000)与递归深度(默认 5,上限 20)均设上限,防扫描失控。
安装与启用¶
插件通过 dsh plugin 命令安装到指定 profile:
dsh plugin --profile web add github:LeslieWylie/dsh-fleet-audit
本地验证时可以直接指向本地路径:
dsh plugin --profile web add /path/to/dsh-fleet-audit
运行环境要求 Node ^22.19.0 || >=24.0.0,peer 依赖为 @deepseek-ai/cordis ^4.0.1 和 @deepseek-ai/dsh-tools ^0.1.0-rc.6。安装后重启 dsh web,直接说「审计一下本机凭据卫生 / run fleet_audit」即可执行。
典型用法¶
审计通过一个工具调用完成,参数如下:
| 参数 | 类型 | 说明 |
|---|---|---|
roots |
string[] | 递归扫描 .git/config 的目录(可选;默认只查 ~/.gitconfig) |
files |
string[] | 额外要查权限的凭据文件绝对路径 |
scanSecrets |
boolean | 是否扫描 token 前缀字面量(默认 true) |
maxGitConfigs |
number | git config 扫描上限(默认 200,上限 2000) |
maxDepth |
number | 目录递归深度(默认 5,上限 20) |
输出是一份脱敏的 JSON 报告,包含权限问题、git 泄漏和 token 出现情况的汇总:
{
"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."
}
适用场景与注意¶
这个插件适合在多 agent 共用的开发机、CI 容器或长期运行的 agent 环境里做定期体检:确认凭据文件权限没收得过宽、remote 配置里没嵌 token、代码与配置中没有散落的密钥前缀。
使用前先明确它的边界:
- 仅扫描文本类配置文件,不解析加密存储、系统钥匙串、二进制文件。
- token 前缀识别是启发式规则,可能漏报(非常规前缀),也可能误报(需人工复核)。
- 默认只检查固定的凭据文件列表;任意路径要靠
roots/files显式指定。 - 插件不主动修改任何文件。发现泄漏后需自行
chmod 600并轮换密钥。 - 插件以当前 dsh 进程的权限运行,安装前建议检查源码与许可证。
需要卸载时执行:
dsh plugin --profile <p> remove dsh-fleet-audit
或者从 dsh.profile.bundles 中删除对应行。插件只读、无状态,卸载不影响任何用户数据。
最后说明一点:这是独立社区插件,与 DeepSeek 官方或其 DSH 仓库无隶属关系,仓库发布时会添加 dsh-plugin topic 便于发现。
小结¶
dsh-fleet-audit 用一个只读、零依赖、输出脱敏的插件,把「凭据权限是否收紧、remote 里有没有嵌 token、有没有裸露的密钥前缀」这三件容易被忽略的事变成一条指令。装上跑一遍,再按报告手动收紧权限、轮换密钥,就是一次完整的卫生审计。