中文

运行批量安全扫描

从 GitHub 发现仓库,或使用 CSV 清单运行可恢复的安全扫描。

使用 npx @openai/codex-security bulk-scan 评审同一批次中的多个仓库。你可以从个人 GitHub 账号或组织发现仓库,也可以提供 CSV,将每个仓库固定到精确的 Git revision。

选择仓库源

来源 适用场景
GitHub 发现 从个人 GitHub 账号或组织中交互选择仓库。
CSV 清单 针对精确的仓库 revision 运行可重复的自动化扫描批次。

这两个工作流都会保存进度、保留每个仓库的结果,并让你在中断后恢复扫描活动。

发现 GitHub 仓库

使用 GitHub CLI 登录:

gh auth login

启动交互式批量扫描:

npx @openai/codex-security bulk-scan

CLI 指导你完成以下步骤:

  1. 选择你的个人 GitHub 账号或组织。
  2. 查看过去 90 天内活动的仓库。
  3. 搜索仓库列表并选择要扫描的仓库。
  4. 选择扫描结果的目录。
  5. 查看选定的仓库并确认扫描批次。

发现不包括已归档仓库和 fork。CLI 记录 <output-directory>/repositories.csv 中每个选定仓库的确切默认分支提交。在你确认选择之前,不会开始扫描。

要使用 GitHub Enterprise Server,请首先登录你的 GitHub 主机:

gh auth login --hostname github.example.com

启动仓库发现时设置 GH_HOST

GH_HOST=github.example.com npx @openai/codex-security bulk-scan

交互式发现需要终端。对于 CI、容器或准备好的仓库列表,请改用 CSV 清单。

创建仓库 CSV

创建一个 CSV,其中每个仓库和固定修订包含一行:

id,repository,revision,scope,mode
payments,https://github.com/example/payments.git,0123456789abcdef0123456789abcdef01234567,services/api,standard
identity,https://github.com/example/identity.git,fedcba9876543210fedcba9876543210fedcba98,,deep

CSV 支持这些列:

是否必填 说明
id 必填 唯一的仓库标识符。可使用字母、数字、句点、连字符或下划线。
repository 必填 HTTPS URL、SSH URL 或本地仓库路径。相对路径以 CSV 所在目录为基准解析。
revision 必填 完整的 40 或 64 字符 Git commit SHA。不支持 branch 名称、tag 或缩写 commit hash。
scope 可选 要扫描的仓库相对目录。省略该值即可扫描完整仓库。
mode 可选 standarddeep。省略该值以使用命令的选定模式。

要查找本地仓库的完整提交 SHA,请运行:

git -C /path/to/repository rev-parse HEAD

从 CSV 运行批量扫描

传递 CSV 和仓库外部的私有输出目录:

npx @openai/codex-security bulk-scan repositories.csv \
  --output-dir /path/outside/repositories/security-scans \
  --workers 4

--workers 控制并发仓库扫描的数量,默认为 4。使用 --mode deep 为没有自己的 mode 的行选择深度扫描。每个 CSV 行仍然可以选择自己的扫描模式和仓库范围。

CLI 会检出每个固定 revision、扫描选定目标、记录结果,并删除临时的仓库检出目录。只有当扫描覆盖完整且所有必要结果产物均存在时,仓库才会被视为完成。

选择模型和推理强度

批量扫描默认使用 gpt-5.6-solxhigh 推理强度。要为 CSV 批次选择其它模型和推理强度:

npx @openai/codex-security bulk-scan repositories.csv \
  --output-dir /path/outside/repositories/security-scans \
  --workers 4 \
  --model gpt-5.6-terra \
  --effort high

交互式仓库发现也支持相同选项:

npx @openai/codex-security bulk-scan --model gpt-5.6-terra --effort high

支持的推理强度为 minimallowmediumhighxhigh

查看批量扫描结果

输出目录包含固定的扫描批次、仅附加结果台账以及每个仓库和尝试的单独产物:

security-scans/
├── manifest.json
├── results.jsonl
├── checkouts/
└── artifacts/
    ├── payments/
    │   └── attempt-1/
    │       ├── scan-manifest.json
    │       ├── findings.json
    │       ├── coverage.json
    │       └── report.md
    └── identity/
        └── attempt-1/
            ├── scan-manifest.json
            ├── findings.json
            ├── coverage.json
            └── report.md
  • manifest.json 记录该扫描批次中的仓库、固定 revision、范围和扫描模式。
  • results.jsonl 记录每个仓库尝试、其状态、产物目录以及任何可用的成本或错误详细信息。
  • report.md 为一次仓库尝试提供可读的报告。
  • findings.jsoncoverage.json 记录该尝试的结果和评审范围。

当你需要可移植结果时,导出一份扫描完成的仓库扫描:

npx @openai/codex-security export \
  /path/outside/repositories/security-scans/artifacts/payments/attempt-1 \
  --export-format sarif \
  --output /path/outside/repositories/payments.sarif

结果可以包含源代码摘录和漏洞详细信息。将输出目录保持私有,位于扫描仓库之外,并遵守适当的保留策略。

恢复批量扫描

使用相同的 CSV 和输出目录运行原始命令:

npx @openai/codex-security bulk-scan repositories.csv \
  --output-dir /path/outside/repositories/security-scans \
  --workers 4

CLI 会继续处理尚未完成的仓库。只有相应回执和全部必要扫描产物仍然存在时,才会跳过已经完成的仓库。

不要更改现有输出目录中的仓库清单。CLI 会校验固定的 manifest,并拒绝不属于同一批次的扫描。更改仓库、revision、范围或扫描模式时,请使用新的输出目录。

重试仓库错误

使用 --max-attempts 在临时签出或扫描错误后重试仓库:

npx @openai/codex-security bulk-scan repositories.csv \
  --output-dir /path/outside/repositories/security-scans \
  --workers 4 \
  --max-attempts 3

默认为每个仓库尝试一次。每次尝试都会收到自己的回执和产物目录。

批量扫描使用这些退出码:

退出码 含义
0 每个仓库均已成功完成。
2 仓库未能完成、扫描覆盖不完整,或命令遇到输入或运行时错误。
130 Ctrl-C 中断了扫描批次。
143 SIGTERM 终止了扫描批次。

在 Docker 中运行批量扫描

Codex Security 仓库 包含一个强化的 Compose 配置,用于 Linux Docker 主机上的自动化 CSV 批量扫描。主机必须支持非特权用户命名空间创建。

将仓库 CSV、扫描结果和登录状态挂载到持久目录。通过环境变量或 secret manager 提供 OpenAI 凭据。对于私有 GitHub 仓库,以相同方式提供 GH_TOKENGITHUB_TOKEN

使用已安装的 CSV 和输出目录运行映像:

docker compose run --rm codex-security \
  bulk-scan /input/repositories.csv \
  --output-dir /output \
  --workers 4

使用相同的安装 CSV 和输出目录来恢复扫描活动。对于 GitHub Enterprise Server,将 CODEX_SECURITY_GIT_HOST 设置为你的 GitHub 主机。

要查看所有可用 flag,请参阅批量扫描命令参考。有关扫描覆盖范围和结果的常见问题,请参阅 CLI 常见问题解答