根本原因是远程服务器上的 vscode-server 进程无法访问 marketplace.visualstudio.com 或 update.code.visualstudio.com,因代理未配置、dns/tls 失败或防火墙拦截,导致插件下载卡在 downloading 阶段,所有操作均发生在远端而非本地。

远程扩展下载卡住,根本不是本地网速慢或 VSCode 崩了,而是远程服务器上的 vscode-server 进程压根没连上 marketplace.visualstudio.com,或者连上了但被拦截、超时、权限拦路——所有“Installing…”“Downloading…”“一直转圈”,都发生在远端,和你本地浏览器能不能打开插件市场毫无关系。
为什么 Remote 扩展安装卡在 downloading 阶段
VSCode Remote 模式下,插件不是在你本机装的,而是由远程服务器上运行的 vscode-server 进程发起 HTTP 请求,去拉取扩展包(.vsix)和依赖二进制(如 cpptools-srv、pyright)。它不继承你 shell 里的 HTTP_PROXY,也不读系统 /etc/environment,更不会用你本地 Clash 的代理设置。
- 执行
curl -I https://marketplace.visualstudio.com在远程终端里直接测试,返回Failed to connect或卡住 10 秒以上,就是根源 - 即使能通外网,若服务器 DNS 解析慢、TLS 握手失败、或被企业防火墙重置连接,也会表现为 pending 状态,界面只转圈不报错
- 某些插件(如 C/C++、Python)还会额外尝试下载语言服务器二进制,这些请求走的是微软另一套 CDN(如 update.code.visualstudio.com),和 marketplace 是两个独立链路
手动下载 vscode-server 并离线部署到服务器
这是绕过 “Downloading VS Code Server” 卡死最稳的方式,适用于服务器完全无法访问 update.code.visualstudio.com 的场景。
- 在本地 VSCode 中按
Ctrl+Shift+P→ 输入Remote-SSH: Show Log,第一行日志里找形如6c3e3dba23e8fadc360aed4b995217d58e3aa259的 commit ID - 拼出下载地址:
https://update.code.visualstudio.com/commit:6c3e3dba23e8fadc360aed4b995217d58e3aa259/server-linux-x64/stable(注意末尾/stable不可省) - 用
wget下载后scp传到服务器临时目录,例如/tmp/vscode-server.tar.gz - 在服务器上执行:
mkdir -p ~/.vscode-server/bin/6c3e3dba23e8fadc360aed4b995217d58e3aa259<br>tar -xzf /tmp/vscode-server.tar.gz -C ~/.vscode-server/bin/6c3e3dba23e8fadc360aed4b995217d58e3aa259 --strip-components 1<br>chmod +x ~/.vscode-server/bin/6c3e3dba23e8fadc360aed4b995217d58e3aa259/bin/code-server
- 确保
~/.vscode-server/bin/<commit>/bin/code-server</commit>存在且可执行;否则下次连接仍会重试下载
让 vscode-server 正确使用代理下载插件
远程服务器能通外网但需代理?别改 ~/.bashrc 或 /etc/environment,那些对 vscode-server 进程无效。它只认自己配置文件里的 http.proxy。
- 编辑远程服务器上的
~/.vscode-server/data/Machine/settings.json(注意路径含Machine,不是User) - 写入:
{"http.proxy":"http://your-proxy:8080","http.proxyStrictSSL": false}(若代理需认证,格式为http://user:pass@proxy:8080,密码特殊字符要 URL 编码) - 必须断开当前 Remote 连接并重连,
vscode-server启动时才加载该配置 - 如果公司出口强制校验证书,
http.proxyStrictSSL: false必须设,否则 TLS 握手直接失败,现象仍是卡住
离线安装插件:不是拖 .vsix 就完事
双击 .vsix 或用 UI 菜单“Install from VSIX”仍可能触发联网行为(比如校验签名、下载依赖二进制),导致卡住。真正离线安装必须走命令行 + 清理缓存。
- 先在有网机器确认版本兼容性:查
Help: About得到 VSCode 版本(如1.87.2),再打开 .vsix 解压,检查package.json中"engines": { "vscode": "^1.80.0" }是否满足 - 用命令行安装:
code --install-extension /path/to/ms-python.python-2024.6.0.vsix(路径必须绝对,Windows 含空格要加引号) - 安装后立即退出 VSCode,删除
~/.vscode-server/extensions/ms-python.python-*下残留的.incomplete文件夹或异常时间戳子目录 - 对于 C/C++ 这类含 native 依赖的插件,还需手动下载对应 commit 版本的
cpptools-srv,放进扩展目录根路径并chmod +x,否则状态栏永远显示“正在安装依赖项”
真正麻烦的从来不是“下不下来”,而是“看似装上了,却静默失败”——比如插件目录存在、UI 显示已启用,但语言服务起不来、补全不工作。这种时候,~/.vscode-server/data/logs 下的 exthost 日志比任何界面提示都真实。











