核心用法
OTP Challenger 是一个为 AI Agent 和自动化脚本设计的身份验证中间件,在执行敏感操作前强制要求用户进行 2FA 验证。支持两种验证方式:
- TOTP(时间型一次性密码):6 位数字,兼容 Google Authenticator、Authy 等标准应用
- YubiKey OTP:44 字符 ModHex 格式,硬件安全密钥
主要脚本包括:
verify.sh:验证 OTP 代码,成功后可维持 24 小时有效状态check-status.sh:查询当前验证状态generate-secret.sh:生成 TOTP 密钥及二维码
典型使用场景
# 在部署脚本中集成 source ../otp/verify.sh if ! verify_otp "$USER_ID" "$OTP_CODE"; then echo "🔒 需要 OTP 验证" exit 1 fi kubectl apply -f production.yaml # 验证通过后执行敏感操作
显著优点
1. 即插即用:提供 Bash 函数封装,可直接嵌入现有脚本
2. 双模支持:同时支持软件 TOTP 和硬件 YubiKey,适应不同安全级别需求
3. 状态缓存:验证成功后 24 小时内无需重复验证,平衡安全性与用户体验
4. 速率限制:内置 OTP_MAX_FAILURES(默认 3 次)防止暴力破解
5. 零秘密存储:状态文件仅存储时间戳,密钥通过环境变量或外部配置管理
潜在缺点与局限性
- 依赖外部工具:需预装
oathtool(TOTP 计算)或 Node.js(备用实现) - 单用户状态文件:
memory/otp-state.json默认路径,多实例部署需自行同步 - 无内置加密:状态文件明文存储,依赖文件系统权限保护
- YubiKey 需联网:验证需调用 Yubico 云 API,离线环境不可用
- 固定有效期:24 小时过期时间不可按风险等级动态调整
适合人群
- DevOps 工程师:为 CI/CD 部署、Terraform 应用添加审批人验证
- SRE/平台团队:构建需人工确认的自动化运维工作流
- 安全管理员:在现有脚本体系中快速接入 2FA,无需改造底层系统
- 金融科技开发者:支付审批、资金转账等场景的身份复核
常规风险
| 风险类型 | 说明 | 缓解建议 |
|---------|------|---------|
| 配置泄露 | `OTP_SECRET` 或 `YUBIKEY_SECRET_KEY` 暴露 | 使用专用 secret 管理工具(如 Vault),禁止硬编码 |
| 状态文件篡改 | `otp-state.json` 被恶意修改跳过验证 | 设置严格文件权限(0600),考虑签名验证 |
| 中间人攻击 | YubiKey 验证流量被拦截 | 验证 Yubico API TLS 证书,考虑代理白名单 |
| 时钟漂移 | TOTP 验证因系统时间不一致失败 | 部署 NTP 同步,或增大时间窗口容忍度 |