Gitleaks 是一款静态应用安全测试(SAST)工具,用于检测 Git 仓库中硬编码的密钥,如密码、API 密钥和令牌。它是一款易于使用的一体化解决方案,可检测代码中过去或现在存在的密钥。
Gitleaks 可通过 Docker 安装使用,也可通过 Homebrew、源码编译等方式安装。以下是 Docker 部署方案示例:
bashdocker pull zricethezav/gitleaks:latest docker run -v ${本地待扫描文件夹路径}:/path zricethezav/gitleaks:latest [COMMAND] --source="/path" [OPTIONS]
bashdocker pull ghcr.io/zricethezav/gitleaks:latest docker run -v ${本地待扫描文件夹路径}:/path zricethezav/gitleaks:latest [COMMAND] --source="/path" [OPTIONS]
Usage: gitleaks [command] 可用命令: completion 为指定 shell 生成自动补全脚本 detect 检测代码中的密钥 help 查看命令帮助 protect 保护代码中的密钥 version 显示 Gitleaks 版本 标志: -c, --config string 配置文件路径 优先级顺序: 1. --config/-c 2. (--source/-s)/.gitleaks.toml 若未设置 --config/-c 且不存在 .gitleaks.toml/gitleaks.toml, 则 .gitleaks.toml 将写入 (--source/-s)/.gitleaks.toml 供后续使用 --exit-code string 检测到密钥时的退出码 (默认: 1) -h, --help 查看帮助 -l, --log-level string 日志级别 (debug, info, warn, error, fatal) (默认 "info") --redact 从日志和标准输出中脱敏密钥 -f, --report-format string 输出格式 (json, csv, sarif) -r, --report-path string 报告文件路径 -s, --source string 源代码路径 (Git 仓库、目录、文件) -v, --verbose 显示详细扫描输出 使用 "gitleaks [command] --help" 查看命令详细信息。
git log -p 的输出;可使用 --no-git 选项扫描非 Git 文件/目录。git diff 输出,--staged 标志可检查已 git add 的更改,适合作为预提交钩子使用。可使用 git log 命令验证 Gitleaks 检测到的密钥。示例输出:
json{ "Description": "AWS", "StartLine": 37, "EndLine": 37, "StartColumn": 19, "EndColumn": 38, "Context": "\t\t\"aws_secret= \"AKIAIMNOJVGFDXXXE4OA\"\": true,", "Secret": "AKIAIMNOJVGFDXXXE4OA", "File": "checks_test.go", "Commit": "ec2fc9d6cb0954fb3b57201cf6133c48d8ca0d29", "Entropy": 0, "Author": "zricethezav", "Email": "***", "Date": "2018-01-28 17:39:00 -0500 -0500", "Message": "[update] entropy check", "Tags": [], "RuleID": "aws-access-token" }
验证命令格式:
bashgit log -L {StartLine,EndLine}:{File} {Commit}
示例:
bashgit log -L 37,37:checks_test.go ec2fc9d6cb0954fb3b57201cf6133c48d8ca0d29
将示例 pre-commit.py 脚本复制到仓库的 .git/hooks/ 目录,即可将 Gitleaks 作为预提交钩子运行。
Gitleaks 支持自定义密钥检测规则,配置文件为 TOML 格式:
toml# Gitleaks 配置文件标题 title = "Gitleaks 配置" # 定义密钥检测规则的数组 [[rules]] # 规则唯一标识符 id = "示例规则-1" # 规则简短描述 description = "示例规则 1" # 用于检测密钥的 Golang 正则表达式(不支持前瞻断言) regex = '''golang风格的正则表达式''' # 用于匹配路径的正则表达式,可单独使用或与 regex 配合 path = '''文件路径正则表达式''' # 元数据和报告标签 tags = ["标签1", "标签2"] # 用于检查正则匹配组香农熵的索引 entropyGroup = 3 # 正则组需满足的最小香农熵值 entropy = 3.5 # 规则级允许列表,用于减少误报或忽略已知密钥的提交 [rules.allowlist] description = "忽略提交A" commits = [ "commit-A", "commit-B"] paths = ['''文件路径正则表达式'''] regexes = ['''匹配已检测密钥的正则'''] # 全局允许列表,优先级高于规则级允许列表 [allowlist] description = "忽略提交A" commits = [ "commit-A", "commit-B"] paths = ['''文件路径正则表达式'''] regexes = ['''匹配已检测密钥的正则''']
默认配置可参考 gitleaks.toml。
默认退出码:
--exit-code 标志自定义检测到密钥时的退出码。来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429