如果你在安装 Claude Code 或 Codex CLI 后,运行时一直卡在登录、拉取模型配置、请求超时,或者直接报出 401、403、ETIMEDOUT、ENETUNREACH 这类错误,先不要急着重装。很多时候不是命令写错,而是本机网络、代理或账号授权没配对。
如果你在国内环境里使用 Claude Code 国内、Codex CLI 这类 AI 命令行工具,最常见的问题就是:连不上服务、能连上但认证失败、代理没被 CLI 继承,或者系统代理和终端代理不是同一套设置。
先分清是哪种情况
1. 直接超时或连接失败
表现通常是请求很久没返回,或者看到 ETIMEDOUT、ENOTFOUND、ECONNRESET、network error。多半是网络路径不通,或者 CLI 没走代理。
2. 能连上但认证失败
常见报错是 401、403、invalid token、unauthorized。说明网络已经通了,但 API Key、登录态、环境变量或账号权限有问题。
3. 只在终端里失败,浏览器能打开
这通常是终端没有继承系统代理,或者你只给浏览器设了代理,CLI 没用上。
4. 某些机器能用,某些机器不能
多半是 Windows 和 macOS 的代理继承方式不同,或者你在一个终端窗口里导出了代理变量,换了窗口就没了。
分步解决
1. 先确认你到底在用哪种认证方式
Claude Code 和 Codex CLI 可能走不同的登录/密钥方式。先看你安装文档要求的是登录账号还是 API Key,不要混用。
如果是 API Key,先确认变量名是否写对。常见的是在当前终端里设置环境变量,而不是只写在记事本里。
Windows PowerShell 可临时执行:$env:HTTP_PROXY="http://127.0.0.1:7890"; $env:HTTPS_PROXY="http://127.0.0.1:7890"
Windows CMD 可临时执行:set HTTP_PROXY=http://127.0.0.1:7890 && set HTTPS_PROXY=http://127.0.0.1:7890
macOS 或 Linux 可临时执行:export HTTP_PROXY=http://127.0.0.1:7890; export HTTPS_PROXY=http://127.0.0.1:7890
注意把 127.0.0.1:7890 换成你自己的代理地址和端口。
2. 检查代理是不是只配了浏览器,没有配到终端
很多人能开网页,但终端里 curl、node、python 还是直连。
先在终端里测试代理变量是否生效:
Windows PowerShell 输入:echo $env:HTTP_PROXY
macOS/Linux 输入:echo $HTTP_PROXY
如果返回空,说明当前终端没拿到代理。
如果你用的是系统代理,终端不一定自动继承。此时更稳妥的做法是直接在当前终端设置 HTTP_PROXY、HTTPS_PROXY,再重新执行 CLI。
3. 先做一个最小网络测试
不要一上来就跑主程序。先测试能不能访问目标域名。
在终端输入:curl -I https://api.openai.com 或 curl -I https://claude.ai
如果这里都超时,说明问题不在 CLI,本质是网络或代理。
如果返回 200、301、403 都算有响应,至少说明通路基本正常,接下来重点查认证。
4. Windows 下把代理写到当前会话或系统环境变量
临时测试用 PowerShell 最方便。打开 Windows Terminal 或 PowerShell,输入:
$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:HTTPS_PROXY="http://127.0.0.1:7890"
然后在同一个窗口里运行 Claude Code 或 Codex CLI。
如果想长期生效,打开“设置”→“系统”→“关于”→“高级系统设置”→“环境变量”,在“用户变量”里新增 HTTP_PROXY 和 HTTPS_PROXY。
改完后一定要重新打开终端窗口,否则旧窗口看不到新变量。
5. macOS 下优先检查终端启动方式
macOS 里常见问题是你改了系统代理,但 Terminal 或 iTerm2 没继承。
先在当前终端输入:echo $HTTP_PROXY 和 echo $HTTPS_PROXY,看是否有值。
如果没有,临时执行:export HTTP_PROXY=http://127.0.0.1:7890; export HTTPS_PROXY=http://127.0.0.1:7890
如果你想长期生效,可把这两行写进 ~/.zshrc 或 ~/.bashrc,保存后执行 source ~/.zshrc。
如果是图形界面启动的应用,有时和登录 shell 的环境变量不同,建议先在同一个终端里启动 CLI,不要从 Finder 里直接点。
6. Android / iOS 怎么看
Claude Code 和 Codex CLI 这类命令行工具本身不运行在 Android 或 iOS 上,但很多人会在手机上改代理、查账号、复制密钥。
Android 上通常在“设置”→“网络和互联网”→“VPN”或“代理”里配置,但这只影响手机应用,不会自动影响电脑终端。
iOS 里在“设置”→“无线局域网”→已连接网络右侧“i”→“配置代理”里设置,也只影响当前设备网络。
也就是说,手机上能打开不代表电脑终端能用,排障时一定要回到实际运行 CLI 的那台电脑上看代理变量。
7. 如果是 401/403,先处理账号和密钥
401 一般是密钥无效、过期或没传上去。403 常见于权限不足、地区限制、账号状态异常。
先检查你是不是把 Key 放进了错误变量名,或者多写了空格。
如果工具要求登录,退出后重新登录一次;如果要求 API Key,重新复制一遍,注意不要带前后空格和换行。
然后再跑一次请求,看错误是否从 401/403 变成连通性错误,或直接成功。
8. 检查代理协议是否写对
有些代理只支持 http,有些支持 socks5。不要把 socks5 地址写成 http,也不要把端口写错。
常见写法示例:
HTTP_PROXY=http://127.0.0.1:7890
HTTPS_PROXY=http://127.0.0.1:7890
如果你用的是 socks5,一些工具还需要额外配置 ALL_PROXY=socks5://127.0.0.1:7891。
协议不匹配时,常见现象是“看起来连上了,但请求仍然失败”。
验证是否修好
先在同一个终端里执行你刚才设置的代理变量检查命令,确认输出不是空。
再执行 curl -I 目标域名,看是否能在几秒内返回响应头。
最后重新运行 Claude Code 或 Codex CLI,观察三点:
1. 不再长时间卡住。
2. 不再出现 ETIMEDOUT、ENETUNREACH。
3. 如果之前是 401/403,改完后能继续进入下一步或正常返回结果。
如果工具支持 verbose 或 debug 参数,可以打开一次详细日志,看请求是否真的走了代理、认证头是否带上。
还是不行怎么办
1. 把代理切换成“终端直连可见”的方式
有些工具只认环境变量,不认系统代理;也有些相反。优先以当前终端里的 HTTP_PROXY、HTTPS_PROXY 为准,不要只靠浏览器插件或系统面板。
2. 换一个干净终端窗口
关闭所有终端,重新打开一个新窗口,再次设置变量后运行。很多“明明改了却没生效”的问题,其实是旧会话没刷新。
3. 检查本地安全软件和公司网络策略
杀毒软件、代理审计、公司网关都可能拦截 CLI 的 TLS 请求。可以临时换到手机热点验证。如果热点下正常,问题基本就在原网络。
4. 看工具自己的配置文件
有些 CLI 会在用户目录下保存单独的配置,不完全听环境变量。先按官方文档确认配置路径,再检查是否有旧的代理地址或过期 Key。
5. 如果确认就是国内网络访问受限
而且你已经确认账号、密钥、终端变量都没问题,仍然是连接失败,那么问题通常就落在网络路径上。此时可以考虑使用一个稳定的代理方案,或者像 Roxi 这类提供代理能力的工具来让终端流量正常出站。
最后提醒一次:排障时最重要的是把“网络不通”和“认证失败”分开。先用 curl 验通路,再查变量和密钥,别一上来只盯着安装步骤。