VS Code + WSL 下 GitHub 访问不稳定及 Copilot 卡顿解决方案
本文记录一次开发环境排查过程:从 VS Code + WSL 环境下 GitHub 克隆失败,到 Copilot/Codex 长时间停在 "Thinking…" 的完整解决步骤。
说明: 文中涉及的'网络辅助工具''连接加速端口'均指代常见的网络优化方式,用于解决访问境外开发资源时的稳定性问题(GitHub、Copilot 等)。
解决 VS Code 结合 WSL 环境下 GitHub 克隆失败及 Copilot 响应卡顿问题。核心原因为 WSL 网络出口 IP 动态变化导致代理配置失效。方案包括清理错误代理、配置系统环境变量、修改 VS Code 设置以及使用自动化脚本动态获取主机出口 IP 并写入 .bashrc,实现永久生效。
本文记录一次开发环境排查过程:从 VS Code + WSL 环境下 GitHub 克隆失败,到 Copilot/Codex 长时间停在 "Thinking…" 的完整解决步骤。
说明: 文中涉及的'网络辅助工具''连接加速端口'均指代常见的网络优化方式,用于解决访问境外开发资源时的稳定性问题(GitHub、Copilot 等)。
使用 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