dsh-fleet-audit:给 DSH agent 机器做一次只读的凭据卫生审计

前言

多 agent 时代的开发机上,凭据散落在 ~/.gitconfig、agent 配置、.git/config 和各种 .env 里。git 的 url.*.insteadofpushurl 一旦嵌了 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@hosthttps://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、有没有裸露的密钥前缀」这三件容易被忽略的事变成一条指令。装上跑一遍,再按报告手动收紧权限、轮换密钥,就是一次完整的卫生审计。

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

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

Xiaoye