一个用 Rust 编写的小型 CLI 工具,可按需从剪贴板中剥离秘密信息。绑定一个热键,选中文本,按下组合键——剪贴板中就会保留一个经过脱敏处理的版本。正常的 Ctrl+C / Ctrl+V 永远不会被拦截。
Linux - 一条命令,无需额外设置:
curl -sSf https://secretstripper.download/install.sh | bash
默认组合键:Ctrl+Alt+X。
macOS - 需要一次性设置全局热键辅助工具(skhd 或 Hammerspoon)。请参阅 macOS 设置 了解权限和故障排除。
brew install koekeishiya/formulae/skhd
curl -sSf https://secretstripper.download/install.sh | bash
# 授予 skhd 辅助功能权限:系统设置 -> 隐私与安全性 -> 辅助功能
skhd --restart-service
默认组合键:Cmd+Shift+C。
Windows (PowerShell) - 需要 AutoHotkey v2。请参阅 Windows 设置 了解完整流程。
winget install AutoHotkey.AutoHotkey
iwr -useb https://secretstripper.download/install.ps1 | iex
默认组合键:Ctrl+Alt+C。
从 crates.io 安装 (Rust) - 同样的系统前置条件适用(macOS 需要 skhd,Windows 需要 AutoHotkey):
cargo install secret-stripper && secret-stripper init
从源码 (git) 构建:
cargo install --git https://github.com/kalix127/secret-stripper.git --locked && secret-stripper init
安装后,选中文本并按下你的组合键。在 Linux 上,PRIMARY 选区会被直接读取,因此你可以跳过 Ctrl+C。使用 Ctrl+V (macOS 上为 Cmd+V) 粘贴。
运行 secret-stripper menu 调整设置,或运行 secret-stripper --help 查看所有命令。
在 macOS 上,如果没有一个常驻进程,就无法零安装地注册真正的全局热键。Secret Stripper 本身保持一次性运行,因此它将热键捕获委托给两个广为人知的辅助工具之一:skhd(轻量级,推荐)或 Hammerspoon(更重,可脚本化)。如果两者都未安装,init 会回退到打印手动绑定说明。
通过 Homebrew 安装 skhd:
brew install koekeishiya/formulae/skhd
运行 secret-stripper init。 它会写入 ~/.skhdrc、用于每日更新检查的 launchd LaunchAgent 以及配置文件。输出中包含“DE binding”行:如果检测到 skhd / Hammerspoon,则显示 OK;否则显示 FAILED 并附带安装提示。
授予 skhd 辅助功能权限。 skhd 需要此权限才能拦截全局热键,否则它会静默地不捕获任何内容。打开系统设置 -> 隐私与安全性 -> 辅助功能,点击 +,添加 /usr/local/bin/skhd,并将其开关打开。如果 skhd 已在运行,请重新启动它,以便新权限生效:
skhd --restart-service
测试组合键:
echo "[email protected]" | pbcopy
# 按下你的组合键(默认:Cmd+Shift+C)
pbpaste # 预期输出:[REDACTED]
Hammerspoon 替代方案: brew install --cask hammerspoon,打开一次以授予辅助功能权限,然后运行 secret-stripper init——它会将绑定写入 ~/.hammerspoon/init.lua 而不是 ~/.skhdrc。
默认组合键: Cmd+Shift+C。macOS 应用经常声称拥有 Cmd 修饰组合键,因此如果与你使用的某个功能冲突(浏览器开发者工具、Finder 的“复制路径”等),可以从 secret-stripper menu -> 重新绑定热键 中重新绑定。如果你希望提前规划,有两个更安全的选择:Cmd+Option+X 或 Cmd+Ctrl+X。
Windows 没有零安装的方式注册真正的全局热键。与 macOS 相同的限制——Secret Stripper 将热键捕获委托给 AutoHotkey v2(skhd 的 Windows 对应物)。AutoHotkey 底层使用 Win32 RegisterHotKey API,是唯一一种能够在聚焦窗口、全屏应用和提升权限的进程之间可靠传递组合键的机制。需要安装 AutoHotkey - 如果 init 找不到它,会中止并显示安装提示。
通过 winget 安装 AutoHotkey:
winget install AutoHotkey.AutoHotkey
该软件包将 AutoHotkey v2 安装到 C:\Program Files\AutoHotkey\v2\。
运行 secret-stripper init。 它会写入 %APPDATA%\secret-stripper\secret-stripper.ahk,放置一个启动 .lnk 快捷方式,以便 AHK 在每次登录时重新运行该脚本,并立即启动 AHK 进程,使组合键无需注销即可生效。
测试组合键:
Set-Clipboard "[email protected]"
# 按下你的组合键(默认:Ctrl+Alt+C)
Get-Clipboard # 预期输出:[REDACTED]
Ctrl+Alt+<键>(可选加上 Shift);其他组合键会被拒绝。Ctrl+C,再按你的组合键)。schtasks 每日任务在 11:00 运行。.ahk 文件和启动 .lnk。你正在运行的其他 AHK 脚本不受影响。有关完整的桶分类、严重性等级和模式列表,请参阅 DETECTION_COVERAGE.md。
从 secret-stripper menu -> 脱敏样式 中选择检测到的秘密的替换方式:
相同的设置适用于热键触发、redact 管道子命令以及 paste-guard AI-TUI 包装器。
秘密信息通常不仅存在于文本中,还存在于截图中——终端截图、配置面板截图、API 仪表板截图。当你触发热键且剪贴板中包含的是图像而非文本时,Secret Stripper 会对该图像进行 OCR,运行与文本检测相同的检测器,并仅对包含秘密的单词绘制纯黑色方块覆盖。脱敏后的图像被写回剪贴板。图像的干净部分保持不变——绝不会将整个截图涂黑。
仅 Linux 支持——包括 X11 和 Wayland。在 macOS 和 Windows 上,热键仍执行文本脱敏;对于剪贴板中的图像,则不予处理。
当剪贴板中是图像时,即使你选中了文本,热键也会对图像进行脱敏——因此 截图 -> 热键 操作即可正常工作。
它需要 tesseract OCR 命令行工具位于你的 PATH 中。这是一个可选的运行时依赖项:其他所有功能无需它也能正常工作。
sudo pacman -S tesseract tesseract-data-eng # Arch
sudo apt install tesseract-ocr # Debian / Ubuntu
sudo dnf install tesseract # Fedora
它在失败时采取保守策略:如果 tesseract 缺失、无法读取图像或无法定位检测到的秘密,则剪贴板将保持不变,并收到一条通知——原始图像永远不会被静默传递,也永远不会被清除。OCR 使此路径比即时文本路径慢(全屏截图大约需要半秒到几秒),因此在粘贴前等待通知。
图像脱敏默认处于关闭状态。从 secret-stripper menu -> 检测设置 -> 截图脱敏 打开它,或在 config.toml 中设置 enable_image_scan = true。
secret-stripper init 会查找已安装的 AI 终端工具(Claude Code、Codex CLI、aider、Gemini CLI、Continue、opencode),并打印一个可直接复制粘贴的 shell 别名代码块。每个别名将工具路由到 paste-guard,这是一个 PTY 包装器,它拦截剪贴板粘贴,在秘密到达 AI 提示之前对其进行脱敏——手动键入和正常输出不受影响。将代码片段复制到你的 shell 配置中(~/.zshrc、~/.bashrc、~/.config/fish/config.fish 或 PowerShell 配置文件),然后打开一个新的 shell:
# ----------------------------------
alias claude='secret-stripper paste-guard -- claude'
alias codex='secret-stripper paste-guard -- codex'
# ----------------------------------
Secret Stripper 不会自行写入你的 shell rc 文件。要停止通过 paste-guard 路由,删除两个虚线注释行之间的代码块。
适用范围。 paste-guard 是一个针对单个进程的包装器——它仅过滤你运行它的那一个命令中的粘贴内容。日常使用的 ssh、psql、vim、kubectl、裸 shell 提示符、GUI 应用程序、系统剪贴板——所有这些都完全不受影响。你还可以手动为非 AI 工具添加别名(针对 psql / mysql 的现场演示、屏幕录制)——包装叶子命令是可以的,但包装整个 shell 通常不行。
你也可以通过同一引擎管道传递任意文本:
cat secrets.log | secret-stripper redact > clean.log
限制。 需要使用终端支持带括号粘贴(每个现代模拟器都支持,包括 VSCode 集成终端和 tmux 透传);键入的秘密永远不会被修改,仅修改粘贴的秘密;超过 1 MiB 的粘贴负载将未经脱敏直接通过。
请参阅 CONTRIBUTING.md 了解构建、测试、代码检查和提交约定。
| 操作系统 | 状态 | 热键后端 |
|---|
| Linux | ✅ 支持 | gsettings (GNOME / Cinnamon / Unity / Budgie / Pantheon), gsettings (MATE 方案), xfconf-query (XFCE), kwriteconfig + qdbus (KDE Plasma 5/6) |
| macOS | ✅ 支持 | skhd (~/.skhdrc) 或 Hammerspoon (~/.hammerspoon/init.lua);如果两者都未安装,则提供手动配置说明 |
| Windows | ✅ 支持 | AutoHotkey v2 (%APPDATA%\secret-stripper\secret-stripper.ahk) - 通过 winget install AutoHotkey.AutoHotkey 安装 |
| 类别 | 示例 |
|---|
| 🔴 云服务密钥 | AWS 密钥、Google API 密钥、Azure 凭据、OpenAI 令牌、Stripe 密钥、Heroku API 密钥 |
| 🔴 认证令牌 | GitHub 令牌、GitLab 令牌、Slack 令牌、Discord 令牌、JWT、Bearer 令牌、NPM 令牌 |
| 🔴 加密密钥 | RSA/EC/OpenSSH 私钥、PGP 私钥、SSH 公钥 |
| 🔴 个人身份信息 | 信用卡号、社会安全码、电话号码、电子邮件地址、护照号码 |
| 🟠 连接字符串 | PostgreSQL、MongoDB、Redis、MySQL、含凭据的 JDBC URL |
| 🟡 启发式 | 异常字符串、含秘密的 env 文件、含密码字段的 JSON、Base64 编码内容 |
| 🟢 安全 | 普通文本、电子邮件、文档——不会误报 |
| 样式 | aws=AKIAIOSFODNN7EXAMPLE 的输出 |
|---|
| 标记(默认) | aws=[REDACTED] - 使用可配置的标记字符串(八个预设 + 自定义) |
| 丢弃 | aws= - 完全移除匹配的字节 |
| 类型化 | aws=[AWS_ACCESS_KEY_ID] - 将每个片段替换为从匹配模式名称派生的标签 |
| 占位符 | aws=AKIAIOSFODNN7EXAMPLE - 替换为匹配模式的真实但虚假的示例值(电子邮件变为 [email protected],Stripe 密钥变为 sk_test_4eC39HqLyjWDarjtT1zdp7dc) |