VS Code + WSL 环境下 GitHub 访问与 Copilot 连接问题解决方案
本文记录一次开发环境排查过程: 从 VS Code + WSL 环境下 GitHub 克隆失败,到 Copilot/Codex 长时间停在 'Thinking…' 的完整解决步骤。
解决 VS Code 配合 WSL 开发时 GitHub 克隆失败及 Copilot 长时间 Loading 的问题。核心原因为 WSL 网络结构导致 127.0.0.1 指向 Linux 而非 Windows 主机,且主机出口 IP 动态变化。解决方案包括清理错误代理配置、测试直连、在 WSL 中设置主机出口代理地址、修改 VS Code 配置文件以继承环境变量,以及使用自动化脚本检测并更新网络出口 IP,实现永久生效。
本文记录一次开发环境排查过程: 从 VS Code + WSL 环境下 GitHub 克隆失败,到 Copilot/Codex 长时间停在 'Thinking…' 的完整解决步骤。
使用 VS Code + WSL 进行开发时可能遇到以下问题:
fatal: unable to access 'https://github.com/...': Failed to connect to 172.xx.xx.xx port xxxx
WSL 的网络结构分为 3 层:
| 层级 | 属于哪里 | 特点 |
|---|---|---|
| Windows 主机 | VS Code 本体运行、网络辅助软件运行 | 使用主机网络 |
| WSL Linux | Git、curl、Copilot 后台运行 | 127.0.0.1 指的是 WSL 自身 |
| Remote WSL 扩展 | VS Code 与 WSL 的桥梁 | 同时依赖两端的网络配置 |
关键点:
WSL 中的 127.0.0.1 不是 Windows,而是 Linux 自身。 当需要访问境外服务(如 GitHub、Copilot)时,WSL 必须正确访问到主机的网络出口。
主机出口地址可通过 WSL 查询:
cat /etc/resolv.conf |grep nameserver
示例:
nameserver 172.25.176.1
这个地址每次重启电脑可能变化,因此很多网络相关设置会失效。
git config --unset http.proxy git config --unset https.proxy git config --global --unset http.proxy git config --global --unset https.proxy unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy ALL_PROXY all_proxy
curl -I https://github.com
返回 HTTP/2 200 说明已能正常访问。
则需要在 WSL 中写入对应的 主机出口地址:
export HTTP_PROXY="http://172.25.176.1:xxxx"
export HTTPS_PROXY="http://172.25.176.1:xxxx"
git config --global http.proxy http://172.25.176.1:xxxx
git config --global https.proxy http://172.25.176.1:xxxx
注意:
此处的 xxxx 代表你的'连接中转端口'(常见为 7890/10809 等)。
Ctrl + Shift + P → Preferences: Open Settings (JSON)
写入:
{
"http.proxySupport":"on",
"http.systemProxy":false,
"http.proxyStrictSSL":false,
"terminal.integrated.env.linux":{"NO_PROXY":"localhost,127.0.0.1,::1,.local"}
}
⚠️ 不要在这里写死
"http.proxy",因为主机出口 IP 是会变化的。
VS Code 会自动继承 WSL 环境变量。
将下面的脚本保存为:
~/fix_vscode_wsl_proxy.sh
#!/usr/bin/env bash
set -e
# ==============================
# VS Code + WSL 外网连通性一键修复脚本
# 可在访问境外开发资源(如 GitHub、Copilot)异常时使用
# ==============================
PORT="${PORT:-7890}"
echo "正在读取主机出口 IP ..."
HOST_IP=$(awk '/^nameserver/ {print $2; exit}' /etc/resolv.conf || true)
if [ -z "$HOST_IP" ]; then
echo "未找到 nameserver,请手动检查 /etc/resolv.conf"
exit 1
fi
echo "主机出口 IP: ${HOST_IP}"
echo "使用端口:${PORT}"
export HTTP_PROXY="http://${HOST_IP}:${PORT}"
export HTTPS_PROXY="http://${HOST_IP}:${PORT}"
echo
echo "正在测试 Copilot 连接 ..."
set +e
curl -I --max-time 5 --proxy "http://${HOST_IP}:${PORT}" https://api.githubcopilot.com
set -e
echo
echo "写入 ~/.bashrc 自动配置 ..."
BASHRC="${HOME}/.bashrc"
MARK="WSL auto network config"
if ! grep -q "${MARK}" "$BASHRC" 2>/dev/null; then
cat >> "$BASHRC" << EOF
# === ${MARK} ===
HOST_IP=\$(awk '/^nameserver/ {print \$2; exit}' /etc/resolv.conf)
if [ -n "\$HOST_IP" ]; then
export HTTP_PROXY="http://\${HOST_IP}:${PORT}"
export HTTPS_PROXY="http://\${HOST_IP}:${PORT}"
fi
# === End of ${MARK} ===
EOF
echo "已写入 ~/.bashrc"
else
echo "自动配置已存在"
fi
echo "完成,重启 VS Code (Remote WSL) 可立即生效。"
nano ~/fix_vscode_wsl_proxy.sh
chmod +x ~/fix_vscode_wsl_proxy.sh
~/fix_vscode_wsl_proxy.sh
source ~/.bashrc
| 问题 | 根因 | 解决方案 |
|---|---|---|
| Git clone 失败 | 出口 IP 变化、未正确连接外部服务 | 在 WSL 中更新主机出口 IP |
| Copilot 卡住 | VS Code 未继承正确的网络代理 | VS Code 使用 WSL 环境变量 |
| 每次重启都要重新设置 | 主机 IP 每次变化 | 使用自动修复脚本 |

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online