Codex CLI 登录失败,多数是浏览器与终端的网络不一致:浏览器走了某个节点完成授权,终端却没走代理或走了另一个地区。先让终端设置代理环境变量,再把客户端切到全局模式或开启 TUN 模式,确保两端使用同一个支持地区节点后重新登录。
目录
Codex CLI 登录失败,大多数时候不是账号问题,而是网络不一致。登录流程分三段:终端发起登录并打开浏览器,浏览器访问 OpenAI 完成授权,授权结果回调到本机,终端再向 OpenAI 服务确认。只要浏览器与终端走的不是同一个支持地区节点,或者终端根本没走代理,流程就会卡在最后一步。
所以排查的核心只有一句话:让浏览器和终端走同一个节点,而且这个节点在支持地区内。
常见失败表现与原因
| 表现 | 最可能的原因 | 处理 |
|---|---|---|
| 浏览器授权成功,终端一直等待 | 终端没走代理 | 设置代理环境变量 |
| 浏览器提示地区不支持 | 浏览器走了香港或不支持地区节点 | 换美国、日本、新加坡节点 |
| 回调页面打不开 | 本地回调地址被转发给代理 | 确认 localhost 不走代理 |
| 登录成功但首个请求失败 | 终端与浏览器地区不同 | 统一节点后重新登录 |
排查步骤
- 在执行登录的终端中设置代理环境变量,并用 curl 验证能访问 api.openai.com。
- 同时设置 NO_PROXY,让本地回调地址不经过代理。
- 把代理客户端切到全局模式,或开启 TUN 模式,让浏览器与终端落在同一个节点。
- 节点选择美国、日本或新加坡,避开香港。
- 清除浏览器中 OpenAI 相关的登录状态后,重新执行登录。
macOS / Linux / WSL:
export HTTPS_PROXY=http://127.0.0.1:7897
export HTTP_PROXY=http://127.0.0.1:7897
export NO_PROXY=localhost,127.0.0.1
curl -I https://api.openai.com
Windows PowerShell:
$env:HTTPS_PROXY = "http://127.0.0.1:7897"
$env:HTTP_PROXY = "http://127.0.0.1:7897"
$env:NO_PROXY = "localhost,127.0.0.1"
curl.exe -I https://api.openai.com
端口以客户端显示为准,Clash Verge Rev 通常是 7897。完整的终端代理说明见 Codex CLI 代理设置。
为什么推荐 TUN 模式
规则模式下,浏览器与终端的流量可能匹配到不同规则、落到不同节点组,这正是回调失败的温床。TUN 模式在系统层接管流量,浏览器、终端和后台进程都走同一套规则,基本消除了「两边不一致」的问题。开启方法见 Clash Verge TUN 模式。
开启 TUN 后如果仍然失败,先临时关闭浏览器中的代理类扩展,它们可能把 OpenAI 域名导向另一个出口。
远程环境与 API Key
在远程服务器、容器或没有图形界面的环境中,本机浏览器无法访问远端的回调地址,浏览器授权这条路天然不通。此时更省事的做法是改用 OpenAI API Key 登录,不经过浏览器回调;或者按官方文档提供的远程登录方式操作。截至 2026 年 9 月,具体支持的方式以官方说明为准。
API Key 登录与账号登录计费方式不同,切换前先确认用量与费用。
登录成功后仍然连不上
登录只解决身份认证,后续请求能否稳定还取决于节点质量。如果登录后执行任务频繁报错,按 Codex 无法连接怎么办 继续排查。
总结
- 登录失败多数是浏览器与终端不在同一节点,或终端没走代理。
- 设置 HTTPS_PROXY 的同时设置 NO_PROXY,保证本地回调不经过代理。
- 全局模式或 TUN 模式能让两端走同一节点,是最省事的做法。
- 节点选美国、日本、新加坡,避开香港。
常见问题
浏览器显示授权成功,但终端一直在等待,是什么原因?
授权结果需要回传到本机的一个本地地址,再由终端向 OpenAI 服务确认。如果终端没走代理,这一步会超时;如果浏览器把本地地址也发给了代理,回调也会失败。确认终端代理生效,并检查本地地址是否在代理的例外列表中。
在远程服务器或无图形界面的环境里怎么登录?
远程环境没有本机浏览器,回调地址无法直接访问。可以改用 API Key 登录,或按官方文档提供的方式处理远程登录,截至 2026 年 9 月以官方说明为准。
换成 API Key 登录会更稳定吗?
API Key 登录不需要浏览器回调,能绕开回调失败的问题,但计费方式与 ChatGPT 账号不同。网络要求不变,终端仍然需要走支持地区的节点。