环境与登录
急救手册
"我明明是会员,为什么让我付 API 费?""换台电脑就跑不通""这台机器别人配过,我一登全乱了"——这些不是玄学,全部能定位到五层中的某一层。本手册给你一套系统性检查方法、双工具症状急救表、三大场景剧本,以及一套分级的万能修复方案。
对症快查 + 问题地图
env | cut -d= -f1 | grep -iE 'anthropic|openai' 揪出劫持环境变量,逐个 unset;
② 干净重登:/logout 后重新 /login(Codex:codex logout && codex login);
③ 验证身份:/status / codex login status,确认账号和登录方式是你预期的。没救回来,往下对症查。对症快查:30 秒定位你的问题
| 你遇到的是… | 直达 |
|---|---|
| 登录不上 / 反复要求登录 / Invalid API key | Claude Code 急救表 · Codex 急救表 |
| 我是会员,却被按 API 计费 / 提示组织已停用 | 凭证优先级(看懂根因)→ 急救表 · 计费与额度 |
| 提示 usage limit / 429 / 529 | 急救表 · 计费与额度(CC / Codex)——这不是登录问题,别瞎重装 |
| 这台电脑别人用过/配置过,我一用就乱 | 剧本 A · 共用电脑 |
| 换了台新电脑,想把环境原样带过去 | 剧本 B · 换电脑 / 多机漫游 |
| SSH / 容器 / CI 没有浏览器,怎么登录 | 剧本 C · 无头环境 |
| 改了配置不生效 / 公司电脑配置锁死 | 急救表 · 配置类(CC / Codex) |
| 公司代理 / 内网:TLS 报错、下载失败 | 急救表 · 网络与代理(CC / Codex) |
| 命令找不到 / 版本诡异 / 更新没反应 | 急救表 · 安装与版本(CC / Codex) |
| 说不清哪坏了,想系统性查一遍 | 01 · 五层诊断法 + 体检脚本 |
| 想看完整的排查过程长什么样 | 11 · 案例复盘——四个真实案例从症状走到根因 |
| 全试过了,想安全地推倒重来 | 12 · 万能修复:三级重置 |
问题地图:所有环境问题只有四类根源
Claude Code 与 Codex 的"环境问题"看似五花八门,拆开只有四类根源。认清根源,后面所有章节都是在这张地图上定位、修复。
| 根源 | 典型表现 | 为什么会发生 |
|---|---|---|
| ① 多个安装并存 | 版本忽新忽旧、更新了没变化、命令行为诡异 | native 安装器、npm 全局、Homebrew/WinGet、IDE 扩展自带副本——四种渠道可以同时存在,PATH 里谁靠前谁说了算 |
| ② 凭证多源打架 | "明明登录了却报 Invalid API key"、会员却走 API 计费、organization disabled | 环境变量里的 key 优先级高于你浏览器登录的订阅凭证——一条别人留下的 export ANTHROPIC_API_KEY 就能劫持你的整个会话 |
| ③ 配置层叠覆盖 | "改了不生效"、公司电脑某些设置锁死 | 企业管控 > 命令行参数 > 项目本地 > 项目 > 用户层——你改的层可能被更高层悄悄覆盖 |
| ④ 网络与系统环境 | 登录卡住、TLS 报错、OAuth 回调失败、下载 403 | 公司代理/私有 CA/防火墙拦截回调端口;系统时钟不准还会让 token 校验失败 |
两个工具,同一套心智模型
好消息:两个工具的环境体系高度同构,学一遍方法论,两边通用。
| Claude Code | Codex | |
|---|---|---|
| 老家目录 | ~/.claude(可用 CLAUDE_CONFIG_DIR 搬家) | ~/.codex(可用 CODEX_HOME 搬家) |
| 订阅登录 | /login → 浏览器 OAuth(claude.ai 账号) | codex login → 浏览器 OAuth(ChatGPT 账号,回调 localhost:1455) |
| 凭证存放 | macOS 钥匙串;Linux/Win 为 .credentials.json | auth.json(明文)或系统钥匙串(可配) |
| 体检命令 | claude doctor / 会话内 /status /doctor | 会话内 /status /debug-config;登录日志 codex-login.log |
完整对照表见第 13 章。本页所有结论均核对官方文档 2026-07 版,来源见各节脚注。
五层诊断:先确认来源,再做最小修改
从错误证据选择层级,不必机械执行全部步骤。多个安装路径、代理或凭据变量并不自动代表异常;先确认当前入口实际使用了什么。以下检查不读取密钥文件、不打印环境变量值。
| 层级 | 确认对象 | 安全检查 |
|---|---|---|
| 程序 | 当前 PATH 与安装版本 | which -a codex / which -a claude;多路径时确认实际首选与安装渠道。 |
| 环境 | 变量是否存在及来源 | 只列变量名,区分 shell 与桌面启动环境;不要批量删除。 |
| 认证 | 所选 provider / 当前身份 | codex login status / claude auth status;只在本机查看必要账号信息。 |
| 配置 | 加载层、合法性和适用范围 | Claude 用 /status 的 Setting sources 与 doctor;Codex 对照配置层和启动警告,不依赖未确认的 /debug-config。 |
| 网络 | 错误由登录、网关、API 还是工具服务返回 | 检查实际目标、TLS、代理、超时及响应;单个下载域名连通不证明模型端点可用。 |
# macOS / Linux / WSL:只读检查,输出环境变量名,不输出值
for tool in codex claude; do
if command -v "$tool" >/dev/null 2>&1; then
command -v "$tool"
"$tool" --version
fi
done
env | cut -d= -f1 | sort | grep -iE 'anthropic|claude|codex|openai|proxy|ca_bundle|node_extra_ca' || true
# 只列可能的配置位置,不读取内容
for file in "$HOME/.codex/config.toml" "$HOME/.claude/settings.json" ".codex/config.toml" ".claude/settings.json" ".claude/settings.local.json"; do
[ ! -f "$file" ] || printf '%s\n' "$file"
donePowerShell 可用 Get-Command codex,claude -All 查入口;仅列变量名:Get-ChildItem Env: | Where-Object Name -match 'ANTHROPIC|CLAUDE|CODEX|OPENAI|PROXY' | Select-Object -ExpandProperty Name。不要把不带最后 Select-Object 的完整值输出发到工单。
依据:Codex 配置层 · Claude 设置排错
Claude Code · 认证与凭据入口
核对至 2026-10-20。认证包括 claude.ai 订阅/团队、Claude Console(有条件支持无 Key 登录)、API 凭据、云提供商、企业网关和 profile/工作负载身份。凭据选择取决于运行模式和组织要求,不能把旧版固定优先级视为全部场景通用。
CLI/包装 CLI 的环境变量和 apiKeyHelper 不能直接套用到桌面或云端。macOS Keychain、受限文件回退、Linux/Windows 存储按当前认证文档核实。
依据:官方认证
Claude Code · 设置文件与字段入口
设置文件优先级为托管 → CLI --settings → 项目 local → 共享项目 → 用户;环境变量按字段决定优先级,数组还有特例。settings.json 是严格 JSON,不能写注释或尾逗号。
本站设置与登录指南 → · 官方全部设置(作用域、默认和示例)→
auto/bypassPermissions 等模式不能从项目/local 文件启用;多数设置可热重载,但模型、思考档等需按对应入口切换。
依据:设置文件
Claude Code · 分层排错入口
先用 claude --version、claude --help、claude auth status 与只读 claude doctor 查版本和配置错误;会话内 /status 查 Setting sources、/permissions 查规则来源。不要把修改 base URL 误当作切换计费或凭据。
Codex · 认证与凭据入口
核对至 2026-10-20。官方个人认证主要有 ChatGPT 登录与 API Key;设备码是登录流程,不能当成第三种独立计费身份。自定义网关可有环境 Bearer、自定义头、命令 Token,ChatGPT 经网关则需要双凭据;Bedrock 和企业自动化另有路径。
先用 codex login status 确认官方登录状态,再检查实际选择的 provider。模型登录凭据、MCP OAuth、网关凭据分别管理;不存在一条脱离提供商与运行模式的万能优先级表。
依据:官方认证
Codex · config.toml 配置专题
配置详解已并入 Codex 指南,按 7 个专题组织。内容覆盖 306 条公开配置路径、103 个 Schema 顶层键和 996 条结构路径,重点解释 provider、认证、URL、必需项、互斥与迁移。
关键纠正:项目层先于独立 profile;项目层不能改提供商;≥0.134.0 profile 改独立文件;wire_api 只支持 responses;name 只是显示名。
Codex · 分层排错入口
先记录版本、启动入口、错误来源和所选 provider。401/403 查凭据及服务权限,404/405 查路由,400/422 查模型与协议,流中断查 SSE/WebSocket 和代理。不要先删 auth.json 或开启全访问。
剧本 B · 换电脑 / 多机漫游
核心原则一句话:配置随身走,凭证每机新登,历史留在原地。想清楚"什么带走、什么不带",换机就是十分钟的事。
带什么、不带什么(双工具对照)
| 资产 | Claude Code | Codex | 怎么处理 |
|---|---|---|---|
| 核心配置 | settings.json、全局 CLAUDE.md、skills/、agents/ | config.toml、profiles、全局 AGENTS.md | ✅ 进 dotfiles 仓库,新机 clone 即得 |
| 项目配置 | .claude/、.mcp.json、项目 CLAUDE.md | .codex/、仓库 AGENTS.md | ✅ 本来就在项目 git 里 |
| 凭证 | 钥匙串 / .credentials.json | auth.json / 钥匙串 | ❌ 不拷贝:新机重新登录一次(30 秒),干净又安全 |
| 会话历史 | projects/、history.jsonl(明文!) | 会话数据目录 | ❌ 本地资产不迁移;跨机续会话用 Claude 的 --teleport/云端会话、Codex 的云任务 |
| 缓存/插件 | plugins/、shell-snapshots/ 等 | 日志目录 | ➖ 不备份,新机自动重建 |
新机十分钟标准流程
# 1. 安装(官方 native 渠道,别混用 npm)
curl -fsSL https://claude.ai/install.sh | bash # Claude Code
npm install -g @openai/codex # Codex(或 brew install codex)
# 2. 恢复配置(dotfiles 方案)
git clone git@github.com:你/dotfiles.git ~/dotfiles
ln -s ~/dotfiles/claude ~/.claude # 或 export CLAUDE_CONFIG_DIR=~/dotfiles/claude
ln -s ~/dotfiles/codex ~/.codex # 或 export CODEX_HOME=~/dotfiles/codex
# 3. 各登录一次(凭证绝不拷贝)
claude # 浏览器 OAuth → /status 验证账号与 Login method
codex login # 浏览器 OAuth → codex login status 验证
# 4. 体检收尾
claude doctor && bash ai-env-check.sh
CLAUDE_CONFIG_DIR/CODEX_HOME 指向同步盘目录(注意:同步盘方案别把凭证与 projects/ 也同步进去,用 .gitignore/忽略规则排除)。剧本 C · SSH / 容器 / 无头机 / CI
没有浏览器的环境,登录是另一套打法。两个工具的官方推荐路径不同,别互相套用。
Claude Code:三条路径
- SSH/WSL2/容器交互使用:正常跑
claude,把终端里的 OAuth URL 复制到本地浏览器完成登录,浏览器给出的 code 粘回终端(粘贴失灵就用claude auth login从 stdin 读)。 - CI / 脚本(订阅额度):在本地跑
claude setup-token生成一年期 OAuth token,存进 CI Secret,运行环境设CLAUDE_CODE_OAUTH_TOKEN。注意--bare模式不读它,bare 场景改用ANTHROPIC_API_KEY或apiKeyHelper。 - CI(API 计费):直接
ANTHROPIC_API_KEY环境变量——最简单,但走按量计费。
Codex:官方三方案按优先级
- 设备码(首选):
codex login --device-auth,本地任意浏览器输一次性码。工作区可能需要管理员先启用设备码权限。 - 拷贝 auth.json(官方兜底):有浏览器的机器登录后把
~/.codex/auth.json安全复制到目标机(scp / docker cp)。若本机凭证在钥匙串而非文件,先把cli_auth_credentials_store设为file重登一次。 - SSH 端口转发:
ssh -L 1455:localhost:1455 user@remote后在远端codex login,本地浏览器走标准流程。
Codex CI 长期认证(官方 auth.json 续期循环)
ChatGPT 订阅额度跑 CI 的官方姿势——利用 Codex 运行时自动刷新 token 并回写 auth.json 的机制:
- 可信机器上
codex login(file 存储),把生成的auth.json存入 CI 的 Secret 管理; - 每次任务:恢复 auth.json → 跑 Codex(token 约 8 天不刷会失效,运行中自动续期)→ 回写刷新后的 auth.json 到 Secret;
- 红线:不要多个并发任务共享同一份 auth.json;不要每次都用最初的旧文件覆盖新文件;刷新链断了就回可信机器重新登录播种。自托管 runner 直接给个持久
CODEX_HOME更省事。
CLAUDE_CONFIG_DIR 指向的卷(Linux 凭证就在其中的 .credentials.json);Codex 挂 CODEX_HOME 卷。红线:凭证只进卷,永远不要烤进镜像层。公司网络(代理 / 私有 CA)速查
| Claude Code | Codex | |
|---|---|---|
| HTTP 代理 | HTTPS_PROXY / HTTP_PROXY | 同左,并确保 NO_PROXY 包含 localhost(OAuth 回调) |
| 私有 CA | NODE_EXTRA_CA_CERTS=/path/ca.pem | CODEX_CA_CERTIFICATE=/path/ca.pem |
| 登录方式被锁 | forceLoginMethod(管控) | forced_login_method(管控) |
来源:官方 Authentication(setup-token) · 官方 Codex CI/CD auth(2026-07 版)
案例复盘:从症状到根因
四个高频真实场景,把五层诊断法从头到尾走一遍。看懂这四个,大多数"玄学问题"你都能自己破案——注意每个案例里报错文本和真正根因隔了多远。
案例一 · "我是 Max 会员,却提示组织已停用"
| 现场 | 接手同事的旧电脑,装好 Claude Code、订阅账号登录成功,一提问就报 API Error: 400 "This organization has been disabled"。重装了两次,毫无变化。 |
| 排查 | L1 正常(单一安装、版本最新);L2 命中——env | cut -d= -f1 | grep -i anthropic 揪出一条 ANTHROPIC_API_KEY=sk-ant-…,顺藤摸瓜发现它写在 ~/.zshrc 里,是前任使用者留下的,key 所属的 Console 组织早已注销。 |
| 修复 | unset 变量 + 删掉 rc 文件里的 export 行 → 重开终端 → /status 确认 Login method 回到订阅。全程 3 分钟,一次重装都不需要。 |
| 教训 | 报错说"组织",你想的是"订阅",真正坏的是"环境变量"——报错文本描述的是结果,不是根因。这也是为什么重装(动 L1)对 L2 的病永远无效。 |
案例二 · "VS Code 扩展一直 Invalid API key,终端却好好的"
| 现场 | 终端里 claude 一切正常;VS Code 扩展却反复弹 Invalid API key · Please run /login,登录成功后还是黑屏。社区大量同款(anthropics/claude-code#12204 记录的经典形态)。 |
| 排查 | L3 凭证层命中,但根子在 L2:机器上同时存在三种凭证——OAuth 登录、手动设置的 API key、shell 里的环境变量。终端从 rc 文件读到的环境和 VS Code 图形启动继承的环境不一样,两边各自选了不同的凭证,一边有效一边无效。 |
| 修复 | 只留一种凭证源:清掉全部 ANTHROPIC_* 变量与手动 key → CLI 与扩展各自干净重登 → 两边 /status 都显示同一订阅账号。 |
| 教训 | "终端好、IDE 坏"几乎必然是两个进程看到的环境不一致。多凭证并存时,谁也说不准哪个进程吃到哪个——凭证源永远只留一个。 |
案例三 · "一觉醒来,所有并行会话集体要求重新登录"
| 现场 | 头天晚上开着三个并行 Claude Code 会话合盖睡觉,早上唤醒后三个会话同时弹登录,重登一个另两个又掉——像闹鬼。 |
| 排查 | L2/L3 都干净,反直觉地落在 L1 版本层:查官方 changelog,v2.1.211 之前存在已知缺陷——机器从睡眠唤醒时,多个会话用同一个 token 并发续期,互相把对方的登录作废。 |
| 修复 | 升级到 ≥ v2.1.211(续期改为单进程协调),重登一次,此后再未复发。 |
| 教训 | 集体性、时间点诡异的现象,先查版本与 changelog,而不是折腾自己的配置——官方已修的 bug,你在本地怎么排查都排不出根因。 |
案例四 · "Codex 在 CI 里稳定跑了一周,突然全线 401"
| 现场 | 用 ChatGPT 订阅额度跑 CI:把本机 auth.json 存进 Secret,每次任务恢复后运行。一周后所有流水线开始 401,本机重新导出一份,又能撑几天,循环往复。 |
| 排查 | L3 凭证层命中:Codex 的 token 约 8 天不刷新就 stale。运行中它其实自动续期并回写了 auth.json——但流水线每次都用 Secret 里那份"出厂旧档"覆盖,续期成果全被丢弃,刷新链一断就全线失效。 |
| 修复 | 按官方 CI 方案补上闭环:恢复 → 运行 → 把刷新后的 auth.json 写回 Secret;并发任务不共享同一份凭证。自托管 runner 则直接给持久 CODEX_HOME 一劳永逸。 |
| 教训 | 凭证是活的,不是配置常量。任何"每隔 N 天准时坏一次"的问题,先怀疑某个会过期的东西没有续命通道。 |
案例依据:官方 troubleshoot-install / authentication 文档、anthropics/claude-code#12204、Codex CI/CD auth 官方指南(2026-07 核对);机器与人物细节做了场景化改写,排查路径与根因均为真实机制。
可恢复的排查与重置
先保存错误、版本、实际生效配置和脱敏日志。只在证据指向凭据问题时重新登录,只在确认变量来源与用途后调整环境。不要把清空全部配置目录当作通用修复;原流程的选择性备份不能恢复被删除的全部会话、技能和状态。
需要隔离配置时,先确认实际配置目录(包括自定义目录),完整复制到有时间戳的独立位置并检查可读取;保留原目录,再一次只禁用或调整一个已确认有问题的文件。验证失败就恢复该项。重置后仍失败并不能证明问题一定在服务端。
双工具概念对照 + 资源索引
一张表打通两个工具
| 概念 | Claude Code | Codex |
|---|---|---|
| 老家目录 / 搬家变量 | ~/.claude / CLAUDE_CONFIG_DIR | ~/.codex / CODEX_HOME |
| 用户配置文件 | settings.json(JSON) | config.toml(TOML) |
| 全局记忆/指令 | ~/.claude/CLAUDE.md | ~/.codex/AGENTS.md |
| 凭证存储 | macOS 钥匙串 / .credentials.json | auth.json / 钥匙串(cli_auth_credentials_store) |
| 看当前凭证/状态 | /status | codex login status、/status |
| 配置体检 | claude doctor、/doctor、--safe-mode | /debug-config、codex-login.log |
| 环境变量劫持源 | ANTHROPIC_API_KEY、ANTHROPIC_AUTH_TOKEN | OPENAI_API_KEY(API 计费模式) |
| CI 长期认证 | claude setup-token → CLAUDE_CODE_OAUTH_TOKEN(一年) | auth.json 恢复→运行→回写循环;或 API Key |
| 无浏览器登录 | 复制 URL 本地登录 + 粘 code / claude auth login | --device-auth / SSH 转发 1455 |
| 私有 CA | NODE_EXTRA_CA_CERTS | CODEX_CA_CERTIFICATE |
| 企业强制策略 | forceLoginMethod / forceLoginOrgUUID | forced_login_method / forced_chatgpt_workspace_id |
| 多账号隔离 | CLAUDE_CONFIG_DIR + alias | CODEX_HOME + alias(官方一等支持讨论中) |
资源索引(按可信度排序)
| 资源 | 说明 |
|---|---|
| Claude Code · Troubleshoot installation and login | 官方安装与登录排障总页——"错误信息 → 修复"对照表最全的一处,先查它 |
| Claude Code · Authentication | 官方认证机制全解,凭证优先级顺序的唯一权威出处 |
| Claude Code · Settings · ~/.claude 目录详解 | 配置层叠与目录内容的官方口径 |
| Codex · Authentication(→ learn.chatgpt.com) | Codex 官方认证文档:登录方式、凭证存储、无头方案 |
| Codex · CI/CD auth | 官方 CI 长期认证方案(auth.json 续期循环) |
| Claude 帮助中心 · 安装与认证排障 | 官方支持视角的补充,含求助渠道 |
| madewithlove · 多账号不登出方案 · Josh Grossman · Windows 双账号 | 社区实战:CLAUDE_CONFIG_DIR 隔离方案的两篇代表作 |
| ClaudeLog Troubleshooting · codex-multi-auth | 社区排障速查与 Codex 多账号管理工具 |
| 本知识库关联章节 | Claude Code 指南 · 配置与账号全解 · Codex 指南 · 配置与账号全解——配置层叠、MCP 位置、环境变量全表在那边 |