命令行工具默认不读 Windows 的系统代理设置,这是“浏览器能上、终端不能上”的根本原因。本文给出让各类 CLI 工具走 Clash 的标准做法——它们也是排查代理问题的利器。

curl:最快的链路验证工具

# 不走代理,看本地出口
curl https://api.ip.sb/ip
# 显式走 Clash,看节点出口
curl -x http://127.0.0.1:7890 https://api.ip.sb/ip
# SOCKS5 方式(7890 混合端口两者都支持)
curl --socks5 127.0.0.1:7890 https://api.ip.sb/ip

两次返回的 IP 不同,说明代理链路通畅。-v 参数可以看到详细握手过程,定位失败环节。

环境变量:一次生效当前会话

绝大多数 CLI 工具(curl、wget、pip、go 等)遵守 http_proxy/https_proxy 环境变量:

# PowerShell
$env:http_proxy = "http://127.0.0.1:7890"
$env:https_proxy = "http://127.0.0.1:7890"

# CMD
set http_proxy=http://127.0.0.1:7890
set https_proxy=http://127.0.0.1:7890

只对当前终端窗口有效,关闭即失效——这通常正是你想要的。想永久生效可写入系统环境变量,但不建议(容易忘记,Clash 没开时所有终端断网)。

常用工具的专属配置

# Git
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
# 取消:
git config --global --unset http.proxy

# npm
npm config set proxy http://127.0.0.1:7890
npm config set https-proxy http://127.0.0.1:7890

# SSH over 代理([email protected] 场景,写入 ~/.ssh/config)
Host github.com
  ProxyCommand connect -S 127.0.0.1:7890 %h %p
提示:嫌逐个配置麻烦,直接开 TUN 模式——网络层接管后所有命令行工具自动走代理,无需任何环境变量。环境变量方案的优势是精确可控、不需要管理员权限。