【Claude Code 循环登录】浏览器显示成功,CLI 永远 Not logged in

​ 你在终端里敲 /login,浏览器弹出来,输入账号密码,页面显示"Success"。一切看起来没问题。切回终端,随便执行一条命令:

复制代码
Not logged in. Run /login

​ 再登一次。浏览器又成功了。回到终端,还是 Not logged in。

​ 然后进入了**无限循环。**你开始怀疑 OAuth 回调出了问题,检查代理设置,升级 CLI 版本,甚至重新 logout 再 login。全部无效。

​ 这篇文章记录这次排查的完整过程。先说结论:问题不在认证,而是磁盘满了。

一、问题现象

​ 环境是 Linux 开发机,Claude Code CLI,使用 Claude 订阅账号登录(非 API Key)。

​ 复现步骤很简单:

bash 复制代码
claude /login
# 浏览器打开 → 登录成功 → 页面提示 Success

claude whoami
# Not logged in

​ 每次 /login 浏览器都显示成功,每次回到终端都说未登录。登录状态像是写进了黑洞。进去了,但读不出来。

二、排查过程

​ 最开始怀疑的方向都是认证相关的:

bash 复制代码
# 重新登录
claude logout && claude login

# 升级 CLI
npm update -g @anthropic-ai/claude-code

​ 全部试了,全部无效。

​ 但在跑 npm update 的时候,终端闪过一行不起眼的报错:

复制代码
ENOSPC: no space left on device

磁盘满了。 这行报错淹没在一堆输出里,很容易忽略。但它是整个问题的关键线索。

三、根本原因:session 写入失败

​ Claude Code 的登录不只是"浏览器上点一下"那么简单。完整链路有五步:

​ 前三步(启动 CLI → 浏览器 OAuth → 拿到 Token)一切正常,浏览器里看到的"登录成功"确实没骗你。问题出在第四步:CLI 拿到 Token 后需要把 session 写入本地文件(通常在 ~/.config/claude/./.claude/ 下),如果磁盘满了,这一步会静默失败,但是没有弹窗、没有报错,就是写不进去。

​ 于是第五步,CLI 下次执行命令时去读 session 文件,发现是空的或不存在,直接判定"未登录"。你只能再次 /login,然后重复这个死循环。

​ 这就是为什么这个问题特别迷惑,断裂发生在你看不见的地方。浏览器那一侧的反馈全是绿灯,但 CLI 这一侧的持久化悄悄失败了,而且没有任何错误提示告诉你"写不进去"。

四、解决方案

4.1 查看磁盘使用情况

​ 先确认是不是磁盘的问题:

bash 复制代码
df -h
  • df = disk free

    查看 文件系统的磁盘使用情况,显示每个挂载点的总容量、已用、可用、使用率等。

  • -h = human readable(人类可读)

    K、M、G、T 单位显示大小,而不是字节,方便理解。

bash 复制代码
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda2       2.0T  1.7T  287G  86% /
tmpfs           126G  1.1M  126G   1% /dev/shm
/dev/vda1       2.0G  185M  1.9G  10% /boot

解释:

含义
Filesystem 文件系统所在设备或挂载点
Size 文件系统总容量
Used 已使用容量
Avail 可用容量
Use% 使用率百分比
Mounted on 文件系统挂载点(对应哪个目录)

​ 如果看到 Use% 列显示 100%,那就是了。

4.2 释放空间

​ 接下来释放空间。几个高收益的清理目标:

bash 复制代码
# npm 缓存,通常几百 MB 到几 GB
npm cache clean --force

# Conda 缓存(如果你用 Conda)
conda clean --all

# pip 缓存
rm -rf ~/.cache/pip

# 项目里的 node_modules(不在用的项目可以删)
rm -rf /path/to/old-project/node_modules

​ 释放完空间,重新登录:

bash 复制代码
claude login

​ 这次 session 能正常写入了,问题立刻消失。

五、举一反三:CLI 工具异常排查思路

​ 这个问题的本质是系统级资源不足导致状态持久化失败。它不只发生在 Claude Code 上,任何需要往磁盘写状态文件的 CLI 工具都可能中招:Git 的 credential helper、Docker 的 auth config、kubectl 的 token cache......症状各不相同,但根因一样。

​ 以后遇到 CLI 工具的"玄学问题",可以按这个优先级排查:

​ 大多数人在前三层就停了,查网络、升版本、看权限,全部无果后开始怀疑人生。真正的原因藏在最底层。

养成习惯:遇到 CLI 工具行为异常,先跑一个 df -h 登录状态丢失、配置无法保存、工具莫名崩溃。这些看似不相干的症状,都可能指向同一个原因:磁盘写不进去了。

​ 在 Linux 上,磁盘满是最安静的故障之一。它不会弹窗警告你,不会让系统崩溃,只是让所有需要写入的操作静默失败。而你看到的,永远是下游的症状,不是上游的原因。

相关推荐
C++ 老炮儿的技术栈2 小时前
Qt 开发机器人客户端程序
c语言·开发语言·c++·windows·qt·机器人
Maguyusi2 小时前
Debian13(trixie) 安装php8.5 php-fpm8.5
开发语言·php·lsky pro
马猴烧酒.2 小时前
【面试八股|计算机网络】计算机网络常见面试题详解笔记
java·开发语言·网络·笔记·计算机网络·算法·面试
2401_833197732 小时前
现代C++多线程编程实战
开发语言·c++·算法
m0_587958952 小时前
C++中的适配器模式实战
开发语言·c++·算法
西门吹雪分身2 小时前
JMM java内存模型分析
java·开发语言
不会写DN2 小时前
Js常用数组处理
开发语言·javascript·ecmascript
还是大剑师兰特2 小时前
数组中有两个数据,将其变成字符串
开发语言·javascript·vue.js
2301_776508722 小时前
C++中的职责链模式实战
开发语言·c++·算法