切了网络环境,设了环境变量,清了系统代理——全部做完,Claude Code 还是 ECONNREFUSED 127.0.0.1:8080。问题根本不在网络层。
这篇文章帮你省掉我那半小时的折腾。先给决策树,方便你对号入座,再详细拆解每个坑是怎么踩的。
先看决策树,对号入座
Claude Code 登录报错(403 / ECONNREFUSED)
│
├── 步骤 1:检查环境变量有没有残留代理配置
│ 运行:env | grep -i proxy
│ ├── 有输出 → 清掉它们:
│ │ unset https_proxy http_proxy all_proxy HTTP_PROXY HTTPS_PROXY
│ │ 再试 claude
│ └── 没输出 → 往下看
│
├── 步骤 2:检查系统代理设置
│ macOS:系统设置 → 网络 → 对应网卡 → 代理 → 全部关闭
│ └── 再试 claude
│
├── 步骤 3:检查 Claude Code 配置文件(最容易被忽略)
│ 运行:cat ~/.claude/settings.json | grep -i proxy
│ 运行:cat ~/.claude.json | grep -i proxy
│ ├── 有代理相关字段 → 删掉,重启终端,再试
│ └── 没有 → 往下看
│
└── 以上都不想折腾?
└── 用 API Key 登录,彻底绕过 OAuth:
export ANTHROPIC_API_KEY=sk-ant-你的key
claude
一行搞定,不走浏览器回调,不依赖任何网络配置
API Key 需要在 Anthropic 的官方控制台(console.anthropic.com)中的 API Keys 页面创建。
下面,我们来看看决策树里每个步骤背后的具体细节和踩坑经历。
坑 1:环境变量指向了一个没在监听的端口
我之前在终端里为了方便,设过代理环境变量:
export https_proxy=http://127.0.0.1:8080
后来网络环境变了,本地的 8080 端口已经没有代理服务在运行了,但这行 export 命令的效果还持续生效着。
当 Claude Code 发起 OAuth 登录请求时,它会读取 https_proxy 这个环境变量,然后老老实实地把请求发到 127.0.0.1:8080。结果没人“接电话”,直接报错 ECONNREFUSED。
解决方法:
unset https_proxy http_proxy all_proxy HTTP_PROXY HTTPS_PROXY
教训:环境变量是隐形的。你设置过一次,它就会在当前终端会话中一直生效,直到你关闭终端或手动 unset。更隐蔽的是,如果你的 ~/.bashrc 或 ~/.zshrc 这类 shell 配置文件中写了 export https_proxy=...,那么每次新开一个终端,它都会自动生效,成为背景里的“默认设置”。
坑 2:macOS 的 bash/zsh 和 Windows 的 PowerShell 语法不一样
这个问题有点蠢,但很容易中招。有一次我从网上抄了一行设置代理的命令:
$env:https_proxy="http://127.0.0.1:8080"
结果执行后报错:No such file or directory。
原因就在于 $env: 是 Windows PowerShell 的语法。在 macOS 或 Linux 的终端(无论是 bash 还是 zsh)里,正确的语法应该是:
export https_proxy=http://127.0.0.1:8080
教训:复制粘贴命令是开发者的日常,但动手前务必先看清楚命令适用的操作系统和终端环境。Stack Overflow 和很多技术博客不会主动帮你区分上下文。
坑 3:环境变量清了,但报错不变
按照第一步操作,执行 unset 之后,满心欢喜地再次尝试运行 claude,结果弹出的依然是 ECONNREFUSED 127.0.0.1:8080。问题并没解决。
当时我系统地排查了三个地方:
env | grep -i proxy → 输出干净,没有任何代理变量。
- 检查 macOS 系统设置(系统偏好设置 → 网络 → 高级 → 代理),确认所有代理选项都已关闭。
- 最后,怀疑到了
~/.claude/ 目录下的配置文件。
一查 ~/.claude/settings.json 和 ~/.claude.json,果然发现了问题:里面缓存了旧的代理设置。
原来,Claude Code 在之前的某次运行中,可能将当时的网络代理配置写入到了自己的配置文件中。之后无论你怎么修改当前终端的环境变量,或是调整系统级代理设置,它在启动时都会优先读取自己那份“缓存”的配置。
解决方法:用文本编辑器打开上述配置文件,找到并删除所有与 proxy 相关的字段(如 http_proxy, https_proxy 等),保存文件,然后彻底重启你的终端再试。
这是全文最反直觉的坑:我们通常会认为代理配置只存在于“系统设置”和“当前终端环境”这两个层面,但很多命令行工具会有自己的配置文件,而且其优先级可能出乎意料的高。
终极方案:API Key 登录
如果你不想逐一排查上述繁琐的网络配置问题,或者环境过于复杂难以理清,这里有一个一步到位的终极解决方案——使用 API Key 直接登录。
这个方法完全跳过了需要浏览器回调的 OAuth 流程,从根本上规避了所有网络代理相关的问题:
export ANTHROPIC_API_KEY=sk-ant-你的key
claude
执行这两行命令,Claude Code 就会使用你提供的 API Key 进行认证。它不依赖本地的浏览器,不关心你的系统或环境变量里有多少乱七八糟的代理设置,简单粗暴且有效。
给开发者的几条实用建议
- 优先考虑 API Key 登录:对于主要在命令行下使用的场景,用 API Key 登录能省去绝大部分因 OAuth 流程导致的网络疑难杂症,体验更稳定。
- 定期检查 Shell 配置文件:养成习惯,定期查看你的
~/.bashrc、~/.zshrc 或 ~/.bash_profile 等文件,清理里面过期或临时添加的 export proxy 配置。
- 注意终端语法差异:在 macOS/Linux 的 bash/zsh 与 Windows 的 PowerShell 之间复制命令时,留心语法区别,避免无效操作或报错。
- 报错顽固时,检查应用配置目录:当错误信息固定不变,且排除了常见环境因素后,不妨去该应用的用户配置目录(如
~/.claude/)下看看,是否有持久化的配置在“作祟”。
- 善用
env | grep -i proxy:这是排查任何与网络连接、代理相关问题的首选快速诊断命令,应该成为你的条件反射。
踩完上面这些坑,Claude Code 终于顺畅地跑了起来。那种感觉,一个字:丝滑。
如果你在配置开发环境时也遇到过其他让人头疼的“坑”,或者有更好的排查技巧,欢迎来 云栈社区 的运维技术板块分享讨论,帮助更多的开发者避坑前行。