当前位置: 首页 > news >正文

【Bug已解决】API Key invalid after rotation / Old key cached — Claude Code API Key 轮换后失效解决方案

【Bug已解决】API Key invalid after rotation / Old key cached — Claude Code API Key 轮换后失效解决方案

1. 问题描述

在 Anthropic Console 中轮换(rotate)API Key 后,Claude Code 仍然使用旧 Key,报认证错误:

$ claude > 帮我分析代码 Error: Invalid API Key {"type":"error","error":{"type":"authentication_error","message":"invalid x-api-key"}} # 检查环境变量已经是新 Key $ echo $ANTHROPIC_API_KEY sk-ant-api03-NEWKEY # 但仍然报旧 Key 无效

或者:

# settings.json 中更新了 Key 但不生效 $ cat ~/.claude/settings.json {"apiKey": "sk-ant-api03-NEWKEY"} $ claude Error: Invalid API Key # 似乎还在使用旧 Key

这个问题在以下场景中特别常见:

  • 在 Anthropic Console 轮换 Key 后未更新本地配置
  • 多个配置来源(环境变量 + settings.json + credentials.json)冲突
  • credentials.json 缓存了旧 Key
  • CI/CD 中使用旧 Key 的 secret
  • Claude Code 登录态缓存了旧 Key

2. 原因分析

核心原理拆解

API Key 轮换 → 旧 Key 被废弃 ↓ Claude Code 从某个缓存位置读取了旧 Key ↓ 使用旧 Key 发送请求 → 认证失败

原因分类表

原因分类具体表现占比
credentials.json 缓存登录态保存了旧 Key约 35%
多来源冲突环境变量和配置文件不一致约 25%
CI/CD secret 未更新GitHub Actions 仍用旧 Key约 20%
Shell 缓存当前 Shell 会话的环境变量约 10%
CC Switch 旧配置切换工具保存了旧 Key约 10%

3. 解决方案

方案一:清除所有缓存的 Key(最推荐)

# 步骤 1:清除 credentials.json rm -f ~/.claude/credentials.json # 步骤 2:清除 settings.json 中的 apiKey cat > ~/.claude/settings.json << 'EOF' { "model": "claude-sonnet-4-20250514" } EOF # 不在文件中保存 Key # 步骤 3:使用环境变量设置新 Key export ANTHROPIC_API_KEY=sk-ant-api03-NEWKEY # 步骤 4:重启终端或 source 配置 source ~/.zshrc # 步骤 5:启动 Claude Code claude

方案二:重新登录

# 步骤 1:退出当前登录 claude logout # 步骤 2:清除凭据 rm -f ~/.claude/credentials.json # 步骤 3:重新登录 claude login # 或直接使用 API Key export ANTHROPIC_API_KEY=sk-ant-api03-NEWKEY claude

方案三:检查所有 Key 存储位置

# 步骤 1:检查环境变量 env | grep ANTHROPIC_API_KEY # 步骤 2:检查 settings.json cat ~/.claude/settings.json | grep -i key # 步骤 3:检查 credentials.json cat ~/.claude/credentials.json 2>/dev/null # 步骤 4:检查项目级配置 cat .claude/settings.json 2>/dev/null | grep -i key # 步骤 5:检查 CC Switch 配置 # CC Switch 的配置文件位置(如果使用) # 步骤 6:确保所有位置使用同一个新 Key # 或清除所有位置只用环境变量

方案四:修复 Shell 会话缓存

# 步骤 1:当前 Shell 可能缓存了旧环境变量 # 开启新终端 # 或手动更新 export ANTHROPIC_API_KEY=sk-ant-api03-NEWKEY # 步骤 2:确保 .zshrc 中是新 Key grep ANTHROPIC_API_KEY ~/.zshrc # 如果是旧 Key,更新 # 步骤 3:重新加载 source ~/.zshrc # 步骤 4:验证 echo $ANTHROPIC_API_KEY # 确认是新 Key

方案五:更新 CI/CD 中的 Key

# 步骤 1:更新 GitHub Actions secret gh secret set ANTHROPIC_API_KEY --body "sk-ant-api03-NEWKEY" # 步骤 2:更新 GitLab CI 变量 # GitLab → Settings → CI/CD → Variables # 步骤 3:更新 Jenkins credentials # Jenkins → Manage → Credentials # 步骤 4:验证 CI 使用新 Key # 在 CI 中添加步骤: - run: echo "${{ secrets.ANTHROPIC_API_KEY }}" | head -c 20

方案六:使用 .env 文件统一管理

# 步骤 1:创建 .env 文件 cat > ~/.claude/.env << 'EOF' ANTHROPIC_API_KEY=sk-ant-api03-NEWKEY EOF # 步骤 2:在 .zshrc 中加载 echo 'source ~/.claude/.env' >> ~/.zshrc source ~/.zshrc # 步骤 3:轮换 Key 时只需编辑 .env # vim ~/.claude/.env # 更新 Key 后 source ~/.zshrc

4. 各方案对比总结

方案适用场景推荐指数难度
方案一:清除缓存通用方案⭐⭐⭐⭐⭐
方案二:重新登录登录态问题⭐⭐⭐⭐⭐
方案三:检查所有位置深度排查⭐⭐⭐⭐⭐
方案四:Shell 缓存环境变量⭐⭐⭐⭐
方案五:CI/CD自动化⭐⭐⭐⭐⭐
方案六:.env 文件长期管理⭐⭐⭐⭐⭐

5. 常见问题 FAQ

5.1 API Key 存储在哪些位置

  1. 环境变量ANTHROPIC_API_KEY
  2. ~/.claude/credentials.json(登录态)
  3. ~/.claude/settings.json(配置文件)
  4. .claude/settings.json(项目级配置)
  5. CI/CD 的 secret/variable
  6. CC Switch 的配置文件

5.2 哪个位置的 Key 优先级最高

环境变量ANTHROPIC_API_KEY优先级最高,覆盖配置文件和 credentials.json。

5.3 轮换 Key 后旧 Key 还能用吗

不能。Anthropic 轮换 Key 后旧 Key 立即失效。所有使用旧 Key 的地方都需要更新。

5.4 credentials.json 是什么

credentials.json存储 Claude Code 的登录凭据(通过claude login获取)。如果使用 API Key 方式,不需要此文件。

5.5 多台机器需要更新 Key

每台机器上的所有 Key 存储位置都需要更新。建议使用配置管理工具(如 Ansible)批量更新。

5.6 如何安全地共享新 Key

不要通过聊天/邮件发送 Key。使用:

  • 密码管理器(1Password、Bitwarden)
  • CI/CD 的 secret 管理
  • 加密的 .env 文件

5.7 Claude Code 仍然使用旧 Key

# 强制清除所有 Key 来源 rm -f ~/.claude/credentials.json unset ANTHROPIC_API_KEY # 重新设置 export ANTHROPIC_API_KEY=sk-ant-api03-NEWKEY # 开新终端 claude

5.8 Docker 中更新 Key

docker run -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY node:22 claude # 确保宿主机的环境变量是新 Key

5.9 Key 轮换的频率

建议每 90 天轮换一次 API Key。如果怀疑泄露,立即轮换。

5.10 排查清单速查表

□ 1. rm ~/.claude/credentials.json 清除登录态 □ 2. 检查 ~/.claude/settings.json 中的 apiKey □ 3. env | grep ANTHROPIC_API_KEY 检查环境变量 □ 4. 检查 .claude/settings.json 项目级配置 □ 5. 检查 CC Switch 配置文件 □ 6. 开新终端避免 Shell 缓存 □ 7. 更新 CI/CD 中的 secret □ 8. 使用 .env 文件统一管理 Key □ 9. 所有位置使用同一个新 Key □ 10. 验证: echo $ANTHROPIC_API_KEY | head -c 20

6. 总结

  1. 根本原因:Key 轮换后失效最常见原因是credentials.json缓存了旧 Key(35%)和多配置来源冲突(25%)
  2. 最佳实践:轮换 Key 后执行rm ~/.claude/credentials.json+export ANTHROPIC_API_KEY=新Key+ 开新终端
  3. 统一管理:使用~/.claude/.env文件统一管理 API Key,轮换时只编辑一个文件,避免多配置来源冲突
  4. CI/CD 更新:轮换 Key 后立即更新所有 CI/CD 的 secret(GitHub Actions、GitLab CI、Jenkins)
  5. 最佳实践建议:不在settings.json中存储 API Key,只通过环境变量传入——这样轮换 Key 时只需更新环境变量,不会遗漏配置文件

故障排查流程图

flowchart TD A[API Key 轮换后失效] --> B[rm ~/.claude/credentials.json] B --> C[unset ANTHROPIC_API_KEY] C --> D[export ANTHROPIC_API_KEY=新Key] D --> E[检查 settings.json 中是否存有旧 Key] E --> F{有旧 Key?} F -->|是| G[从 settings.json 中移除 apiKey] F -->|否| H[开新终端] G --> H H --> I[启动 claude] I --> J{认证成功?} J -->|是| K[✅ 问题解决] J -->|否| L[检查所有 Key 存储位置] L --> M[检查项目级 .claude/settings.json] M --> N{发现旧 Key?} N -->|是| O[更新为新 Key] N -->|否| P[使用 .env 文件统一管理] O --> Q[重新启动] P --> Q Q --> K
http://www.jsqmd.com/news/1148521/

相关文章:

  • kml_adapter与OpenEuler生态:国产操作系统上的高性能计算方案
  • Docker工程化:从安装命令到CI/CD交付的系统认知
  • 新手必看:openeuler/sra_test配置文件详解,轻松调整线程数与NUMA参数
  • 终极指南:如何在免费Audacity中解锁5大AI音频处理功能
  • Intel-gcc架构详解:一文读懂编译器背后的技术原理
  • 基于架构的开发模型:架构驱动开发
  • openeuler/mcp:多云管理平台的终极后端解决方案,你需要知道的一切
  • 从零开始:如何用ESP32实现双路FOC电机控制的完整实践指南
  • 从0到1掌握memwatch:面向初学者的内存调试工具使用手册
  • EfficientNet-B0 复合缩放原理详解:3个维度(深度/宽度/分辨率)的调参实战
  • 从0到1使用gala-spider:配置文件详解与最佳实践
  • IPQC 每日检查要点全解析:确保生产质量的关键防线
  • openEuler ROS故障排除:解决常见ROS安装和运行问题的10个方法
  • HR面试质疑你一年内换了两段实习?留学生用项目周期阐述稳定性「蒸汽求职分享」
  • 从卦象到特征工程:传统文化中的特征提取直觉
  • gala-spider核心组件揭秘:拓扑图存储与根因定位原理解析
  • digest-list-tools未来展望:路线图与社区发展计划
  • 为什么选择kytuning-client?5大优势让OS性能调优效率提升300%
  • epkg-autopkg核心技术解析:多语言构建系统自动嗅探与依赖检测
  • Intel-gcc深度解析:揭秘Intel专属增强版GCC编译器的核心优势
  • GitHub开源项目日报 · 2026年7月6日 · AI代理技能集受追捧
  • 基于MA12070与MK60DN512VLQ10的高保真音频系统设计
  • 模型量化 INT8 实战:PyTorch 静态量化 3 步压缩 ResNet-50,精度损失 <1%
  • UBS-atomic部署指南:在生产环境中配置和优化分布式原子服务的完整流程
  • 如何快速实现openEuler ROS MQTT通信:物联网与机器人系统无缝对接指南
  • Tensor 索引与重塑:从NumPy到PyTorch的3个关键差异与避坑指南
  • openstack-kolla-plugin核心功能解析:轻松实现OpenStack与iSulad适配
  • 贡献uwal项目:从Fork到PR的完整流程指南
  • 如何快速上手openEuler/ha-api:从安装到第一个API调用的完整教程
  • 内核日志永不丢失:openeuler/lep Kbox黑匣子分区管理与数据恢复技巧