remote-ssh插件更新超时是因为远程服务器无法直连marketplace,需配置http_proxy环境变量或ssh端口转发,或改用国内镜像源;修改后必须重连ssh而非重载窗口。

Remote-SSH 连接后插件更新卡住或报 timeout,根本不是本地网络问题,而是远程服务器压根没连上 Marketplace —— 它在用自己的网络发起请求,且默认不走你本地配的代理。
为什么 remote 插件更新会超时
VSCode Remote-SSH 的插件安装/更新行为发生在远程机器上:它会从远程服务器直接访问 https://marketplace.visualstudio.com。如果该服务器本身无法访问外网(如内网环境、ARM 板如 Orange Pi、无代理的云主机),就会卡在 “Installing…” 或直接报 connect ECONNREFUSED / request timed out。
常见误判点:
- 你在本地 settings.json 里写了
http.proxy,但它对远程端完全无效 - 远程终端里
curl https://marketplace.visualstudio.com卡住,就说明问题已定位 - 别信“重装插件”或“清缓存”,没网络权限,重装只是重复失败
远程端手动配置 HTTP_PROXY 环境变量
这是最直接、兼容性最好的方式,适用于所有 shell(bash/zsh)和 vscode-server 启动流程。
在远程服务器上执行:
echo 'export HTTP_PROXY=http://127.0.0.1:7890' >> ~/.bashrc echo 'export HTTPS_PROXY=http://127.0.0.1:7890' >> ~/.bashrc source ~/.bashrc
然后必须断开并重新连接 Remote-SSH(不是 reload window),否则 vscode-server 不会加载新环境变量。
注意:
- 地址必须用
127.0.0.1,别写localhost(某些代理监听不支持 IPv6 回环) - 确保代理服务(如 Clash、Sing-Box)在远程服务器能访问到——但通常不能,所以更常用的是「本地代理 + SSH 端口转发」方案(见下一条)
- Windows 用户若用 WSL 远程,还要确认 WSL 能访问 Windows 主机的
127.0.0.1:7890(需关闭防火墙或加例外)
用 SSH RemoteForward 把本地代理透传给远程
当远程服务器本身不能直连代理(比如 Orange Pi、树莓派、无公网出口的跳板机),就得把本地电脑的代理端口“映射过去”。
步骤分三步:
- 在本地
~/.ssh/config对应 Host 块中加:RemoteForward 127.0.0.1:10808 127.0.0.1:7890 - 远程服务器上设置:
export HTTP_PROXY=http://127.0.0.1:10808export HTTPS_PROXY=http://127.0.0.1:10808 - 重启 Remote-SSH 连接(触发端口转发建立)
验证是否生效:
在远程终端运行 curl -vI https://api.github.com,看到 且响应头含 <code>Via: 字段,说明流量确实经过了你的本地代理。
换 extensions.gallery.serviceUrl 镜像源(免代理方案)
如果你的远程服务器能访问国内镜像(如 Azure CDN),可绕过代理依赖,更稳定。
在远程机器的 VSCode 设置中(即 Remote Machine Settings),打开 settings.json,加入:
"extensions.gallery.serviceUrl": "https://vscode.cdn.azure.cn/extensionGallery/extensionGallery/"
注意末尾斜杠不能少,否则 404;该地址目前仍有效(截至 2026 年 8 月)。
这个方案的局限:
- 部分私有扩展或预发布版本可能不在镜像中
- 如果远程服务器连
vscode.cdn.azure.cn也超时(如某些企业防火墙拦截 CDN 域名),就得退回前两种方案
真正容易被忽略的是:远程端的 HTTP_PROXY 必须由 shell 初始化脚本加载,而不是靠 VSCode GUI 启动时读取 —— 所以改完 .bashrc 后不重连,等于没改。











