📍 你遇到的问题:浏览器能打开,AI CLI 却无法登录
如果你在中国大陆网络环境下使用 Gemini CLI、Codex CLI 或 Claude Code CLI,可能会遇到这种情况:浏览器可以正常打开 Google、ChatGPT、Claude,但在终端里运行 CLI 时却登录失败、一直转圈、请求超时、反复重连,或者提示 User location is not supported。
这通常不是账号坏了,也不一定是软件坏了。更常见的原因是:你的浏览器走了代理,但终端里的 CLI 没有走代理。很多代理软件只会让浏览器自动使用代理,终端命令不会自动跟着走。
这篇教程会一步一步教你检查代理端口、设置终端代理、测试网络是否成功,并分别说明 Gemini CLI、Codex CLI、Claude Code 应该怎么配置。
✅ 先看结论:大多数人这样设置就可以
如果你只是想尽快让 CLI 能用,可以先按照下面这个思路处理:
- 先打开 Clash、v2rayN、Shadowrocket、Surge 等代理软件。
- 找到软件里的 HTTP 代理端口 或 mixed 端口,常见是
7890、10808、10809。 - 在终端里设置
HTTP_PROXY、HTTPS_PROXY和NO_PROXY。 - 重新运行
gemini、codex或claude。 - 如果仍然失败,再开启代理软件的 TUN 模式 或 增强模式。
最重要的一点是:浏览器能打开网站,不代表 CLI 一定能联网。CLI 是在终端里运行的,需要单独确认它有没有走代理。
🧠 为什么浏览器能用,终端不能用?
很多代理软件开启后,会自动设置“系统代理”。浏览器通常会读取系统代理,所以网页能正常打开。但是 Gemini CLI、Codex CLI、Claude Code 这类命令行工具运行在终端里,它们不一定会自动读取系统代理。
终端程序通常更依赖这些环境变量:
HTTP_PROXY:让 HTTP 请求走代理。HTTPS_PROXY:让 HTTPS 请求走代理。ALL_PROXY:让更多类型的请求走代理,不一定所有 CLI 都适合。NO_PROXY:告诉系统哪些地址不要走代理,例如localhost和127.0.0.1。
NO_PROXY 很重要。很多 AI CLI 登录时会在本机打开一个回调地址,如果把本机地址也代理出去,可能出现“浏览器登录成功,但 CLI 还是收不到登录结果”的情况。
🔌 第一步:找到你的本地代理端口
不要直接照抄别人的端口。不同软件、不同版本、不同配置,端口都可能不一样。请打开你的代理软件,在设置里找 HTTP 代理端口 或 mixed 端口。
常见端口只是参考:
- Clash / Clash Verge / Mihomo 常见端口:
7890、7897 - v2rayN 常见 HTTP 端口:
10808、10809、1081 - Shadowrocket / Surge / 其他代理软件:以软件界面显示的 HTTP 端口为准
如果你的代理软件显示 HTTP 端口是 7890,那么后面的命令就使用 127.0.0.1:7890。如果你的端口不是 7890,请把命令里的 7890 改成你自己的端口。
注意:即使变量名叫 HTTPS_PROXY,本地地址通常也写成 http://127.0.0.1:7890,不要写成 https://127.0.0.1:7890。
🪟 Windows 设置方法
如果你使用 Windows,请打开 PowerShell,复制下面命令。这里以端口 7890 为例:
$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:HTTPS_PROXY="http://127.0.0.1:7890"
$env:NO_PROXY="localhost,127.0.0.1,::1"
然后在同一个 PowerShell 窗口里运行你要使用的 CLI:
gemini
codex
claude
这些设置只对当前 PowerShell 窗口生效。关闭窗口后会失效,这是正常的。如果你重新打开终端,需要重新设置一次。
🍎 macOS / Linux 设置方法
如果你使用 macOS 或 Linux,请打开终端,复制下面命令。这里以端口 7890 为例:
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export NO_PROXY=localhost,127.0.0.1,::1
然后在同一个终端窗口里运行:
gemini
codex
claude
这些设置也只对当前终端窗口生效。如果你关闭终端再重新打开,需要重新执行一次。
🧪 第二步:测试代理是否真的成功
设置代理后,可以先用下面的命令测试网络。不要急着直接登录 CLI,先确认终端能连到官方接口。
Windows PowerShell:
curl.exe -I https://api.openai.com
curl.exe -I https://api.anthropic.com
curl.exe -I https://generativelanguage.googleapis.com
macOS / Linux:
curl -I https://api.openai.com
curl -I https://api.anthropic.com
curl -I https://generativelanguage.googleapis.com
如果返回 401、403、404,不一定是坏事,通常说明已经连到服务器,只是没有登录或没有权限。真正需要排查的是这些错误:
timeoutconnection refusedcould not resolve hostnetwork unreachable
如果出现这些错误,说明终端代理还没有配置成功,或者你的代理端口写错了。
🤖 Gemini CLI 设置建议
Gemini CLI 可以读取 ~/.gemini/.env 文件。如果你经常使用 Gemini CLI,建议把代理写进这个文件,这样不用每次手动输入命令。
创建或编辑这个文件:
~/.gemini/.env
写入:
HTTP_PROXY=http://127.0.0.1:7890
http_proxy=http://127.0.0.1:7890
HTTPS_PROXY=http://127.0.0.1:7890
https_proxy=http://127.0.0.1:7890
NO_PROXY=localhost,127.0.0.1,::1
如果你的端口不是 7890,请改成自己的端口。保存后重启终端,再运行:
gemini
💬 Claude Code 设置建议
Claude Code 支持 HTTP_PROXY、HTTPS_PROXY、NO_PROXY 这些标准代理变量。需要特别注意:Claude Code 不支持 SOCKS 代理。如果你的代理软件同时提供 HTTP 和 SOCKS 端口,请使用 HTTP 端口。
临时运行可以这样写:
HTTPS_PROXY=http://127.0.0.1:7890 \
HTTP_PROXY=http://127.0.0.1:7890 \
NO_PROXY=localhost,127.0.0.1,::1 \
claude
也可以写入 Claude Code 的设置文件:
~/.claude/settings.json
{
"env": {
"HTTP_PROXY": "http://127.0.0.1:7890",
"HTTPS_PROXY": "http://127.0.0.1:7890",
"NO_PROXY": "localhost,127.0.0.1,::1"
}
}
保存后重启终端或 Claude Code。如果仍然失败,请确认代理软件里有没有 HTTP 端口,而不是只开了 SOCKS 端口。
🧩 Codex CLI 设置建议
Codex CLI 对网络连接比较敏感。如果你看到反复重连、WebSocket 失败、stream disconnected before completion,优先尝试 HTTP 代理端口,不要优先使用 SOCKS5。
临时运行可以这样写:
HTTP_PROXY=http://127.0.0.1:7890 \
HTTPS_PROXY=http://127.0.0.1:7890 \
NO_PROXY=localhost,127.0.0.1,::1 \
codex
如果你经常使用 Codex CLI,可以尝试创建这个文件:
- macOS / Linux:
~/.codex/.env - Windows:
C:\Users\你的用户名\.codex\.env
写入:
HTTP_PROXY=http://127.0.0.1:7890
HTTPS_PROXY=http://127.0.0.1:7890
NO_PROXY=localhost,127.0.0.1,::1
保存后重启 Codex CLI,再测试:
codex doctor --summary --ascii --no-color
如果仍然反复重连,可能是旧的 Codex 后台进程还在使用旧配置。可以关闭相关终端、退出 Codex 应用,必要时重启电脑后再试。
🛜 什么时候需要开启 TUN 模式?
如果你已经设置了 HTTP_PROXY 和 HTTPS_PROXY,但 CLI 还是有一部分请求失败,可以尝试开启代理软件里的 TUN 模式、增强模式 或 虚拟网卡模式。
TUN 模式的作用是让更多软件流量被代理软件接管。它适合这些情况:
- 你已经设置环境变量,但 CLI 仍然连不上。
- 浏览器授权成功,但终端里还是显示登录失败。
- VS Code 插件、IDE 插件、WebSocket 或后台请求不稳定。
在 Clash Verge、Mihomo、v2rayN 等软件里,相关名称可能叫 TUN Mode、Enhanced Mode、Service Mode、Auto Route、DNS Hijack、虚拟网卡模式。Windows 通常需要管理员权限。
如果开启 TUN 后影响了公司内网、局域网设备、Docker、WSL、游戏或 SSH,可以先关闭 TUN,改用前面的终端代理变量方式。
🖥️ WSL 用户特别注意
如果你在 Windows 上开了 Clash 或 v2rayN,但在 WSL 里运行 Gemini、Codex 或 Claude,WSL 里的 127.0.0.1 不一定是 Windows 主机。
这时可能需要把代理地址改成 Windows 主机在 WSL 里可访问的 IP,例如:
export HTTP_PROXY=http://172.20.96.1:7890
export HTTPS_PROXY=http://172.20.96.1:7890
export NO_PROXY=localhost,127.0.0.1,::1
每台电脑的 IP 可能不同,可以用 ip route 或 cat /etc/resolv.conf 查看。设置前最好先测试端口能不能连通。
⚠️ 常见错误
- ❌ 把
HTTPS_PROXY写成https://127.0.0.1:7890:大多数本地代理端口应该写http://。 - ❌ 忘记设置
NO_PROXY:可能导致浏览器登录成功,但 CLI 收不到本地回调。 - ❌ 照抄别人的端口:端口必须看你自己的代理软件设置。
- ❌ 设置后不重启终端:旧终端窗口或旧后台进程可能还在使用旧配置。
- ❌ 优先使用 SOCKS5:Claude Code 不支持 SOCKS;Codex 在某些场景下使用 HTTP 代理更稳定。
- ❌ 把所有错误都当成网络问题:如果已经连到服务器,但提示额度、付款、地区、账号权限,那就需要检查账号状态,而不是继续改代理。
🔐 安全提醒
- 不要把账号密码、验证码、API Key、Token 发给别人。
- 如果需要截图求助,请先遮住邮箱、密钥、验证码、订单号等敏感信息。
- 不要随便运行陌生人发来的脚本。本文里的命令只是在当前终端设置代理变量,不会修改你的账号。
📝 总结
Gemini CLI、Codex CLI、Claude Code 无法登录或无法联网时,最常见原因是:浏览器走了代理,但终端没有走代理。
解决顺序建议是:先找到代理端口,再设置 HTTP_PROXY、HTTPS_PROXY、NO_PROXY,然后用 curl 测试,最后再运行 CLI。
如果普通环境变量仍然解决不了,再开启 TUN / 增强模式。这样排查最稳,也最不容易把电脑网络设置弄乱。