【Claude】Not logged in · Please run /login 报错已解决

关键词:Claude Code、Not logged in、/login、ANTHROPIC_API_KEY、认证优先级、apiKeyHelper、macOS Keychain、CI 自动化

一、问题现象

启动 Claude Code 或执行任何操作时,终端出现:

Not logged in · Please run /login

此时所有需要后台调用的功能都不可用,包括 /usage、状态行用量指示器等。Claude Code 完全停工。

配图

二、根因:没有可用凭证

这个错误的含义极其直白:当前会话没有任何有效凭证。Claude Code 找遍了所有它知道的凭证来源,什么都没找到。

2.1 Claude Code 的凭证来源(按优先级从高到低)

理解认证优先级是排查这个问题的关键:

优先级 凭证来源 说明
1(最高) ANTHROPIC_API_KEY 环境变量 直接导出到 shell
2 apiKeyHelper 脚本(settings.json 里配置的) 动态获取 key 的脚本
3 云提供商凭证(Bedrock / Vertex AI) AWS/GCP 环境变量
4 /login 存储的 OAuth Token 存在系统 Keychain 或 ~/.claude/
5(最低) 配置文件里的 authToken settings.json 里的 authToken

常见的误判:你以为已经 /login 了,但 ANTHROPIC_API_KEY 环境变量里设了一个空值或无效值,导致 CLI 拿到的是一个"有但无效"的 key,或者某些情况下什么都没拿到。

2.2 常见触发场景

  1. 全新安装,从未登录——最常见,直接 /login 解决;
  2. CI/自动化环境,没有任何凭证注入到运行环境;
  3. 后台/子进程,子进程的环境变量没有从父进程正确继承;
  4. macOS Keychain 故障,存储的 OAuth Token 无法被读取;
  5. 系统时钟偏差,Token 刷新因时钟不准而失败(表现和未登录一样);
  6. 国内用户接第三方 API,环境变量配置的 ANTHROPIC_AUTH_TOKEN + ANTHROPIC_BASE_URL 写错了。

三、解决方案

方案一:运行 /login(最推荐,交互式)

/login

按照提示选择认证方式:

  • Claude 订阅(Pro/Max/Team/Enterprise):会打开浏览器完成 OAuth;
  • Console API Key:会提示你粘贴 key。

登录完成后,凭证存储在系统 Keychain 或 ~/.claude/ 下,下次启动自动读取。

方案二:设置 ANTHROPIC_API_KEY 环境变量

如果你用 Console API key 认证(或者 /login 无法正常使用),在启动 Claude Code 的 shell 里设置:

export ANTHROPIC_API_KEY=sk-ant-api03-xxxxxxxx

注意:设置完要确认 key 真的被 export 了:

echo $ANTHROPIC_API_KEY

临时生效的写法只影响当前 shell 会话。要永久生效,写进 ~/.zshrc~/.bashrc(注意安全,不要把 key 提交到 git)。

方案三:CI / 自动化 —— 配置 apiKeyHelper

CI 环境无法交互式登录,推荐用 apiKeyHelper 脚本:在 ~/.claude/settings.json 里配置一个脚本路径,Claude Code 启动时会执行这个脚本并把 stdout 的第一行当作 API key 使用:

{
  "apiKeyHelper": "/path/to/your/get-key-script.sh"
}

脚本示例(从环境变量或 Secret Manager 里取):

#!/bin/bash
# 从环境变量读取(由 CI 注入)
echo "$MY_CLAUDE_API_KEY"

直接运行脚本验证它能打印有效 key:

/path/to/your/get-key-script.sh

方案四:排查国内第三方 API 接入(常见于通过代理访问)

国内用户通过第三方中转接入时,通常需要同时设置:

export ANTHROPIC_AUTH_TOKEN="sk-你的API密钥"
export ANTHROPIC_BASE_URL="https://api.xxx.com/anthropic"

注意是 ANTHROPIC_AUTH_TOKEN(不是 ANTHROPIC_API_KEY),以及对应提供商的 BASE_URL。检查这两个变量是否都正确设置:

env | grep ANTHROPIC

方案五:macOS Keychain 问题修复

如果你之前能正常登录,但某次后开始反复提示未登录,可能是 Keychain 里的 Token 损坏了:

  1. 运行 /logout 清除存储的 Token;
  2. 再运行 /login 重新认证。

如果依然失败:

  • 检查系统时钟是否准确(date 命令)——时钟偏差超过几分钟会导致 Token 刷新一直失败;
  • 在 macOS 钥匙串访问(Keychain Access)里搜索 "claude",手动删除残留条目,再 /login

方案六:后台/子进程场景

在 Agent SDK 或后台工作进程里遇到这个错误,先确认:

  • 工作进程的启动环境(而不是你的交互式 shell)里是否设置了凭证;
  • 不同进程之间的环境变量是否正确继承;
  • 如果用 CLAUDE_CODE_OAUTH_TOKEN,确认这个变量在子进程中也存在。

四、认证优先级的实际影响

一个常见的"鬼故事"场景:

你用 /login 登录了订阅账户,然后在某个项目的 .env 文件里有 ANTHROPIC_API_KEY=sk-ant-xxx(一个已过期或被撤销的 key),而你的 shell 工具(比如 direnv)自动加载了这个 .env 文件。结果 ANTHROPIC_API_KEY 覆盖了你的订阅凭证,且这个 key 无效,出现各种认证错误。

运行 env | grep ANTHROPIC 是排查这类问题的标准第一步。如果看到了不该有的 key,unset ANTHROPIC_API_KEY 清掉它,再验证 /status

五、总结

Not logged in · Please run /login 意味着 Claude Code 没有找到任何有效凭证。按优先级排查:

  1. 直接 /login——交互式首选;
  2. 检查 env | grep ANTHROPIC——排查环境变量污染;
  3. CI 用 apiKeyHelper——自动化场景标准方案;
  4. macOS Keychain 异常——/logout + /login 重置;
  5. 时钟偏差——校准系统时间。

参考:Claude Code 官方《错误参考》"身份验证"章节、官方认证优先级文档、社区 Token 过期排查记录。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐