VPN 退出了,为什么终端还在连接代理?
你可能在浏览器里关闭了代理,终端的 curl 却仍提示连接某个本地端口失败。这时先查终端继承的代理变量,别急着重装软件。终端环境、桌面网络设置、Git 配置和后台服务并不总是共用一个开关。
本文适合使用 Bash 的 Linux 用户,命令已在 Ubuntu 24.04 环境验证。它处理终端环境变量与 curl 请求,不负责替你修改桌面、Docker、Git 或系统服务配置。
1. 下载检查脚本,先看看有没有代理变量
下载 proxy-env-check.sh,或在你准备存放文件的目录运行:
curl --fail --location --output proxy-env-check.sh https://netgoeasy.com/scripts/proxy-env-check.sh
less proxy-env-check.sh
bash proxy-env-check.sh
在 less 中按 q 返回终端,再运行最后一行。下载地址固定,不需要登录;如果这台电脑暂时无法联网,也可以从其他设备下载后复制文件。不要复制完整环境变量输出到公开讨论区,代理地址可能带有账号和密码。
脚本只显示 http_proxy、https_proxy、all_proxy 和相应大写变量、绕过列表是否存在,不显示内容,也不修改设置。不带参数时不会访问网站。输出可能是:
http_proxy: 已设置(不显示地址或凭据)
https_proxy: 未设置
这是输出格式示例。变量“已设置”只是线索,不代表它一定有问题。curl 对大小写也有区别:它不把大写 HTTP_PROXY 当作 HTTP 代理变量,不能把每一项都理解成同一个设置。
2. 对同一个网站比较原方式和直连
选择一个你平时应该能直接访问的普通网站,将下面的示例地址换成它的网站根地址:
bash proxy-env-check.sh --test https://example.com
脚本发送两次有时间上限的 HEAD 请求:一次保留环境中的代理选择,一次让 curl 绕过代理。它忽略本地 .curlrc、不跟随重定向,也不带你的账号登录信息。输入只接受不含账号、路径和查询参数的 HTTP/HTTPS 根地址。
| 结果 | 更有用的下一步 |
|---|---|
| 原方式失败,直连有响应 | 检查代理进程是否退出、原代理地址和端口是否仍有效,再做下一节的单次直连 |
| 原方式有响应,直连失败 | 当前网络或目标可能需要代理,先保留原配置 |
| 两种方式都有响应 | 继续检查出错命令是否使用其他配置、目标路径或登录条件 |
| 两种方式都失败 | 根据 curl 退出码查解析、连接、超时或证书,不要直接归因于代理 |
HTTP=200 表示收到了相应状态,HTTP=403/405 也可能说明网络已经到达服务器,只是请求被拒绝或不支持 HEAD。它们都不等于账号登录成功。脚本不测试速度,也不判断服务在其他地区是否可用。
3. 只想这一次不走代理,用单条命令
如果只是验证 curl 能否直连,可以先用:
curl --disable --noproxy '*' --connect-timeout 3 --max-time 8 --head https://example.com
把示例网站替换成上一步相同的目标。'*' 要保留引号。这条命令只影响本次 curl,不会把终端和其他程序的代理一起关掉;也不会修改 .curlrc。结束后不用恢复设置。
curl 常见退出码可这样理解:5 是代理名称无法解析,6 是目标主机无法解析,7 是连接失败,28 是超时,60 与证书验证有关。不要为了绕开 60 就给日常命令加跳过证书检查的选项。域名解析问题可以接着用Linux 域名解析检查教程。
4. 确认要取消当前终端的代理,再用 unset
如果你确认这些变量是自己设置的,且当前会话不再需要它们,可以在当前终端直接输入:
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
这里没有清除 no_proxy/NO_PROXY:它们是绕过列表,不是代理服务器地址。取消后再运行脚本核对变量,并重复刚才的目标访问。
注意:运行 bash 某脚本.sh 不能删除父终端里的变量。 所以下载的检查脚本不会宣称“一键关闭你的整个终端代理”,也不要求你用 source 执行陌生文件。
这条 unset 只影响当前 shell 和之后由它启动的进程,已经运行的程序不一定改变。想恢复时,按你原来配置代理的方式恢复;若变量来自终端启动文件,打开新终端可能再次加载它。不要把“重新出现”误认为刚才的命令没有执行。
5. 新终端里又出现了,去找设置来源
可以先在自己的 Bash 启动文件中找包含代理的行:
grep -nEi 'http_proxy|https_proxy|all_proxy' ~/.bashrc ~/.profile 2>/dev/null
这条命令会显示真实配置内容,只在自己设备上查看,不要原样分享。例如确认来源是自己添加的~/.bashrc后,先备份再编辑:
cp -p ~/.bashrc ~/.bashrc.proxy-backup-$(date +%Y%m%d-%H%M%S)
nano ~/.bashrc
在自己添加的代理export行前加#注释;nano中按Ctrl+O、回车保存,再Ctrl+X退出。重新打开终端运行检查脚本,确认变量不再加载。要恢复时,从刚才的备份找到原行,在编辑器中去掉这次添加的#并重新开终端。不把别人的全部配置覆盖回来。找不到不代表系统没有其他配置来源;不要继续批量删除 /etc 下的文件。
如果只有 Git、容器或某个服务失败,而普通 curl 已正常,应转查该程序自己的设置。它们不在这个脚本的检查范围内。
这个脚本会留下什么?
除了你自己下载的 .sh 文件,它不写报告、不上传环境、不改网络设置。可选测试最多进行两次短请求。无需 sudo;删除下载文件即可移除工具。所有网络工具都可从脚本工具栏目找到。
参考资料
- curl 使用手册 · 资料日期 2026-10-22
- curl 代理环境变量 · 资料日期 2026-10-22