昨天上午,我们主力 Claude Max 账号挂了。
当时好几个会话正在写代码,MacBook、公司 Mac Mini、远程开发机和手机瞬间全部退出。到今天,新开的 Max 账号已经平稳跑满 24 小时,所有会话和自动化脚本全部接了回来,没有被二次风控。
换号这事,很多人的第一反应是在终端敲一句claude auth logout,或者把浏览器 Cookies 清一下,然后去买个新号直接登。如果你这么干,大概率用不了几个小时,新号就会连坐秒封。
因为你以为的退出登录,在系统底层根本没动。
这篇文章不仅是我们的踩坑记录,也是一份自包含的清洗指令。如果你手上正有一台机器需要清洗残留、换新号,你可以把这篇文章的全文直接复制给你的 Agent(Claude Code、Codex、Cursor 等),对它说一句:「照着这篇文章里的清洗项和脚本,帮我把本机的 Claude 残留彻底清干净」,它就能直接照着每一步的命令和判据执行。
一、以为退出登录就干净了?逆向看 Claude Code 的本地指纹
封号后,我们顺手翻了翻 Claude Code 的二进制代码,找到了负责生成机器标识的两个函数j5e(e)与SD(e)。
逻辑极其简单粗暴:
- CLI 启动时,先去读本地
~/.claude.json里的machineID和userID; - 只要能读到这两个字段,程序就原封不动直接用;
- 只有字段不存在时,它才会去调系统随机函数,生成一个新的 32 字节 hex。
问题在于:claude auth logout只退登录态,压根不碰machineID和userID。
如果你只是退出了账号,然后直接在原机器上claude login登录新买的号,客户端向 Anthropic 服务端发出的第一条请求,带的就是老账号一模一样的硬件指纹。后台风控系统一秒钟就能判定:这台机器就是之前被封的那个,新号当场报废。
要做的事:必须把~/.claude.json里的旧账号字段抠干净,并且重新生成一对全新的 32 字节随机 hex 塞给machineID和userID。
二、最顺手的一个动作,差点把新号送走:绝不能--resume老会话
这是我们在排查中发现最容易踩、也最致命的一个坑。
本地指纹洗完了,新号也登上了,手头中断的几个需求还没做完。很多开发者的下意识动作是敲:
claude--resume<老会话id>心想:会话转录只是聊天记录,我现在已经是以新账号的身份登录了,接着干就行。
我们去看了~/.claude/projects/目录下的 JSONL 会话转录,每一行系统调用和返回里,都硬编码写着发起会话时的accountUuid、organizationUuid和旧的userID。
claude --resume的底层机制不是重新以新身份发起会话,而是把老会话的历史上下文整个打成载荷发往 API。这意味着只要你敲了 resume,被封账号的旧组织 UUID 会直接被塞进 HTTP 请求体里发给 Anthropic。
服务端识别到带有被封账号 UUID 的请求,会直接判定为绕过封禁,新号立刻完蛋。
结论:被封账号留下的历史会话,只能当作离线的纯文本资料去读。如果你要继续做之前的任务,必须纯文本交接:让 Agent 把之前的目标、进度、写过的文件路径总结成一份 Markdown 格式的任务单,然后开一个全新的会话,让新会话读取任务单从断点起步。
三、macOS 钥匙串与深层系统垃圾:必须清掉的几个路径
除了配置文件,CLI 和桌面客户端在系统各处埋了持久化凭据:
- macOS Keychain(钥匙串):
CLI 存在系统钥匙串里的条目,必须显式删除:Claude Code-credentialsClaude Safe Storage
- 浏览器原生通信(Native Messaging):
Chrome 目录下的com.anthropic.*宿主文件必须清掉。 - 桌面 plist 与最近记录:
ByHost目录下的com.anthropic.claudefordesktop.*.plist以及系统的sfl3最近文档记录,也得清理。 - 浏览器环境物理隔离:
平时天天用的个人 Chrome Profile 绝对不要用来登 Claude。单独开一个干净的 Profile(比如叫「Claude专用」),不登个人 Google 账号、不导书签、不串历史。
四、手机端与支付端:为什么只点 Log out 没用?
- iOS 的 IDFV 机制:
iOS 系统会给同一开发者的所有 App 分配一个Identifier for Vendor (IDFV)。只要你不把 App 删掉,无论在里面点多少次 Log out,新号登上去设备标识依然是旧的。正确的做法必须是长按图标删除 App,彻底抹掉沙盒数据,再去 App Store 重新下载。 - 支付链路物理隔离:
很多人被封号,底层连带着银行卡风控。直接在网页端用 Stripe 刷国内卡或容易被风控的卡,卡号 BIN、账单地址和名字全部透明暴露给风控网关。
最干净的方式是走美区 Apple ID + App Store 内购(IAP)。Apple 和 Anthropic 之间隔着一层 StoreKit 加密凭据,Anthropic 只能确认订阅有效,根本拿不到底层绑定的银行卡号和姓名。
五、后台跑着的定时任务(launchd / crontab):必须先停机
如果你的电脑有定时跑的后台任务(比如 launchd 或 cron 调 Claude CLI):
账号掉线的那一刻,必须立刻把这些任务卸载停掉。否则后台脚本每隔一段时间就调一次claude -p,拿着失效的 token 死循环重试,不仅本地日志堆满垃圾,还会让当前 IP 频繁报未授权,直接被风控标记。
新账号登录后,先在终端运行:
claude auth status看到loggedIn: true并且订阅档位正确(比如default_claude_max_20x)之后,再把后台任务重新拉起。
六、可直接给 Agent 执行的终端清洗脚本
如果你手上的机器需要执行清洗,或者你想把这篇文章喂给 Agent 跑,下面是可以直接粘贴运行的代码块:
#!/bin/bashset-eecho"=== 1. 杀掉全部残留进程 ==="pkill-9-f"claude"2>/dev/null||truepkill-9-f"chrome-native-host"2>/dev/null||trueecho"=== 2. 清除 macOS Keychain 凭据 ==="security delete-generic-password-s"Claude Code-credentials"2>/dev/null||truesecurity delete-generic-password-s"Claude Safe Storage"2>/dev/null||trueecho"=== 3. 清理浏览器原生通信与系统缓存 ==="rm-rf"$HOME/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic."*2>/dev/null||truerm-rf"$HOME/Library/Application Support/Chromium/NativeMessagingHosts/com.anthropic."*2>/dev/null||truerm-f"$HOME/Library/Preferences/ByHost/com.anthropic.claudefordesktop."*.plist2>/dev/null||truerm-f"$HOME/Library/Preferences/com.anthropic."*.plist2>/dev/null||truerm-rf"$HOME/Library/Caches/com.anthropic."*2>/dev/null||truerm-f"$HOME/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.anthropic."*.sfl*2>/dev/null||trueecho"=== 4. 重置 ~/.claude.json 指纹 ==="python3-c' import json, os, secrets p = os.path.expanduser("~/.claude.json") if os.path.exists(p): with open(p, "r", encoding="utf-8") as f: data = json.load(f) for key in ["oauthAccount", "account", "user", "primaryOrgId", "lastCost", "lastTokenUsage"]: data.pop(key, None) data["machineID"] = secrets.token_hex(32) data["userID"] = secrets.token_hex(32) data["autoUpdatesDisabled"] = False with open(p, "w", encoding="utf-8") as f: json.dump(data, f, indent=2, ensure_ascii=False) print("~/.claude.json 清洗完成,已注入全新 32 字节随机指纹") else: print("~/.claude.json 不存在,跳过") 'echo"=== 5. 清理完成,请手动执行 claude login 重新登录 ==="登录完成后,执行claude auth status验收即可。
关于 VibeFriends
VibeFriends 是专注于AI 一人创作者(Vibe Maker / AI Indie Creator)的开发者社群与共创生态。我们相信 AI 能极大赋能拥有想法、创意与执行力的个体,倡导Vibe Coding(以直觉与 AI 智能体驱动的高效编程与自由创作),赋能个体将想法转化为实际产品与商业收益。
社群以深度技术内容与线下实战活动双轮驱动:
- 疯狂星期四(Vibe Thursday):每周四晚举办的独立开发者聚会与 AI 产品创作者开放麦(已举办 70+ 期),包含VibeLaunch真实产品路演;
- VibeHacks:每季度举办的高浓度 AI 创造者黑客松挑战赛;
- 999 俱乐部:面向深度 AI 开发者、重度 API 消耗者与超级个体的专属交流网络。
欢迎关注VibeFriends,或在全网搜索VibeFriends了解每周活动与深度技术沉淀。