文章

终端代理设置:让 Claude Code、Codex、git 走代理

系统代理对命令行工具通常无效。本文给出 zsh/bash、PowerShell、CMD 的代理环境变量写法,git 与 npm 的代理配置,用 curl 验证的方法,以及 TUN 模式这一替代方案。

简短回答

大多数命令行工具不读取系统代理,需要在终端设置 HTTPS_PROXY 等环境变量,或在客户端开启 TUN 模式。设置时把端口换成你客户端实际的本地端口,再用 curl 验证是否生效。

最后更新:作者:梯子Z编辑部2 分钟阅读首发 2026年9月20日

快速步骤 · 6 步

  1. 01
    确认本地代理端口

    在代理客户端设置中查看 HTTP 或混合端口,下文以 7890 为例。

  2. 02
    设置终端环境变量

    根据系统在 zsh、bash、PowerShell 或 CMD 中设置 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY。

  3. 03
    写入快捷开关

    在 ~/.zshrc 中添加 proxy_on 和 proxy_off 函数,按需开关。

  4. 04
    配置 git 和 npm

    用 git config 和 npm config 为两者单独设置代理。

  5. 05
    用 curl 验证

    用 curl 请求 AI 服务的 API 域名,能返回 HTTP 状态码即表示网络已通。

  6. 06
    必要时改用 TUN

    工具不认环境变量时,关闭环境变量并在客户端开启 TUN 模式。

为什么终端需要单独设置代理

客户端里的“系统代理”只是修改了操作系统的代理设置,浏览器会遵循它,但 Claude Code、Codex CLI、git、npm、curl 这类命令行程序通常只读取环境变量(HTTPS_PROXY 等)或自己的配置文件。所以常见情况是:浏览器里 Claude 能正常打开,终端里却一直超时。解决办法有两种:给终端设置代理变量,或在客户端开启 TUN 模式接管全部流量。下面先讲环境变量的写法,再讲 git、npm 的单独配置和验证方法。

第一步:确认本地端口

所有命令里的端口,都要换成你的代理客户端实际监听的端口。本文示例统一使用 7890,这是 Clash 系客户端常见的默认混合端口,但并非所有客户端都是这个值,例如 Clash Verge Rev 和 v2rayN 的默认端口可能不同。请在客户端的设置页中找到 HTTP 端口或混合端口(mixed port)。

macOS / Linux:zsh 与 bash

临时生效(只对当前终端窗口有效):

export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export ALL_PROXY=http://127.0.0.1:7890
export NO_PROXY=localhost,127.0.0.1,::1

有些程序只认小写变量名,可以同时设置 http_proxy、https_proxy 等小写版本。更方便的做法是在 ~/.zshrc(bash 用户写入 ~/.bashrc)末尾加入一对开关函数:

proxy_on() {
  export HTTP_PROXY=http://127.0.0.1:7890
  export HTTPS_PROXY=$HTTP_PROXY ALL_PROXY=$HTTP_PROXY
  export http_proxy=$HTTP_PROXY https_proxy=$HTTP_PROXY all_proxy=$HTTP_PROXY
  export NO_PROXY=localhost,127.0.0.1,::1 no_proxy=localhost,127.0.0.1,::1
  echo "proxy on"
}

proxy_off() {
  unset HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY
  unset http_proxy https_proxy all_proxy no_proxy
  echo "proxy off"
}

保存后执行 source ~/.zshrc,以后在终端输入 proxy_on 即可开启,proxy_off 关闭。

Windows:PowerShell 与 CMD

PowerShell 临时设置:

$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"

需要长期生效,可以写入当前用户的环境变量(新开的终端才会读到):

[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://127.0.0.1:7890", "User")
[Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://127.0.0.1:7890", "User")

CMD 中使用 set,注意等号两边不要有空格,也不要加引号:

set HTTP_PROXY=http://127.0.0.1:7890
set HTTPS_PROXY=http://127.0.0.1:7890

git 与 npm 的单独配置

git 和 npm 有自己的代理配置项,设置后不依赖环境变量:

git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
npm config set proxy http://127.0.0.1:7890
npm config set https-proxy http://127.0.0.1:7890

取消时执行:

git config --global --unset http.proxy
git config --global --unset https.proxy
npm config delete proxy
npm config delete https-proxy

用 curl 验证是否生效

设置完成后,在同一个终端窗口中执行:

curl -sS -o /dev/null -w "%{http_code}\n" https://api.anthropic.com
curl -sS -o /dev/null -w "%{http_code}\n" https://api.openai.com/v1/models

只要返回一个 HTTP 状态码(未带 API Key 时返回 401、404 都正常),就说明网络已经通了;如果长时间无响应或提示连接超时,说明请求没有走代理或节点不可用。Windows 的 PowerShell 中请使用 curl.exe 调用真正的 curl。验证通过后再启动 Claude Code 或 Codex CLI,具体配置可分别参考 Claude Code 网络环境与连接配置 和 Codex CLI 代理与网络配置。

替代方案:TUN 模式

如果需要走代理的程序很多,或者某些工具(部分 IDE 插件、编译工具链)不读取环境变量,可以直接在客户端开启 TUN 模式。TUN 会创建虚拟网卡,在网络层接管流量,不需要逐个配置。代价是需要管理员权限,并且更容易和其他 VPN、加速器冲突。

方案优点缺点
环境变量可控、只影响当前终端每种工具要单独确认是否支持
git / npm 配置长期生效、不依赖变量只对该工具有效
TUN 模式全局接管,免逐个配置需要权限,易与其他软件冲突

仍然无法连接时,按 Claude Code 网络连接失败怎么办 逐项排查。

常见问题

Q设置了 HTTPS_PROXY,为什么关掉终端后就失效了?

用 export 或 $env 设置的变量只在当前终端会话中有效。需要长期生效时,写入 ~/.zshrc、~/.bashrc 或 PowerShell 的用户环境变量。

Q7890 端口一定对吗?

不一定。7890 是 Clash 系客户端常见的默认混合端口,但不同客户端、不同版本的默认端口不同,请在客户端设置中查看实际端口。

Qgit clone 用的是 git@github.com 地址,设置 http.proxy 没用?

http.proxy 只对 HTTPS 地址生效,SSH 地址需要在 ~/.ssh/config 中单独配置代理,或改用 HTTPS 地址克隆。

Q环境变量和 TUN 模式该选哪个?

只需要少数终端工具走代理时,用环境变量更可控;工具很多或某些程序不认环境变量时,开启 TUN 更省事。两者不需要同时使用。

Q公司内网地址也被代理了怎么办?

把内网域名和网段加入 NO_PROXY,例如 localhost、127.0.0.1 和公司内部域名后缀,多个值用英文逗号分隔。

参考来源

  1. Claude Code 企业网络配置文档
  2. git-config 官方文档
  3. npm config 官方文档
Esc

热门搜索

    ↑↓ 选择 · Enter 打开 · Esc 关闭打开搜索页