远程开发常见问题解答
本文涵盖了 Visual Studio Code 远程开发扩展的常见问题。请参阅 SSH、容器和 WSL 文章,了解如何设置和使用各自功能。或者尝试入门教程,帮助你快速在远程环境中运行。
有关GitHub Codespaces的问题,请参阅GitHub Codespaces文档。
概述
什么是Visual Studio Code远程开发?
Visual Studio Code 远程开发扩展包允许您在容器中、远程机器(通过 SSH)或 Linux 的 Windows 子系统中打开任意文件夹,并充分利用 VS Code 的完整功能集。这意味着无论代码位于何处或托管,VS Code 都能提供本地质量的开发体验——包括完整的 IntelliSense(补全)、调试等功能。
VS Code 远程开发相比本地编辑有哪些优势?
远程开发的一些好处包括:
- 能够在与本地运行的不同作系统上编辑、构建或调试。
- 能够在与目标部署环境相匹配的环境中进行开发。
- 开发时使用比本地机器更大或更专业的硬件。
- 能够编辑存储在其他地方的代码,比如云端或客户现场。
- 分离开发环境以避免冲突,提升安全性,加快入职速度。
与使用网络共享或同步文件相比,VS Code 远程开发提供了显著提升的性能,同时更好地控制您的开发环境和工具。
远程开发扩展和GitHub代码空间有什么关系?
GitHub Codespaces 是一项服务,提供托管的云托管开发环境,可通过 VS Code 和新的基于浏览器的编辑器访问。该服务还允许 VS Code 和基于浏览器的编辑器访问自托管环境(桌面或服务器),无需 SSH 服务器或直接网络路由。你可以在 GitHub Codespaces 文档中阅读更多内容。
虽然远程开发和代码空间扩展共享技术和功能,但远程开发扩展是单独发布的,可以独立于 GitHub 代码空间运行。
远程开发扩展是如何运作的?
Visual Studio Code 远程开发允许您的本地 VS Code 安装通过将某些命令的执行转移到“远程服务器”,透明地与其他机器(无论虚拟或物理)的源代码和运行环境交互。当你连接到远程端点时,VS Code 会快速安装 VS Code 服务器,并可托管直接与远程工作区、机器和文件系统交互的扩展。

有关扩展的更多细节,请参见支持远程开发。
远程开发扩展如何保障对远程机器、虚拟机或容器的访问?
Visual Studio Code Remote Development 使用现有且知名的传输工具,如安全壳(secure shell)来认证和保护流量。除了这些知名且安全传输工具使用的港口外,其他港口无需公开开放。
注入的VS Code服务器以你登录机器时的同一个用户身份运行,确保VS Code及其扩展不会未经许可被错误地获得高级别访问权限。服务器由 VS Code 启动和停止,没有连接到任何用户或全局登录或启动脚本。VS Code 管理服务器生命周期,因此你无需担心服务器是否运行。
VS Code Server 可以单独安装或使用吗?
不。VS Code 服务器是远程开发扩展的一个组成部分,由 VS Code 客户端管理。它由VS Code自动安装和更新,连接端点后会被替换,如果单独安装,很快就会过时。它并非为其他客户提供或授权使用。
VS Code 服务器的连接要求是什么?
安装VS Code服务器需要您的本地机器具备出站HTTPS(端口443)连接,以实现:
update.code.visualstudio.comvscode.download.prss.microsoft.com
默认情况下,远程 - SSH 会尝试在远程主机上下载,并在建立连接后备份回本地下载 VS Code 服务器并远程传输。你可以用
开发容器扩展总是本地下载并传输到容器中。
你可以在没有网络连接的情况下手动安装扩展,使用扩展:从 VSIX 安装......命令,但如果你使用扩展面板或devcontainer.json要安装扩展,您的本地机器和VS Code服务器需要通过HTTPS(端口443)访问以下平台:
marketplace.visualstudio.com*.gallerycdn.vsassets.io(Azure CDN)
最后,一些扩展(比如 C#)会从 下载次级依赖download.microsoft.com或download.visualstudio.microsoft.com.其他软件(如Visual Studio Live Share)可能有额外的连接需求。如果遇到问题,可以查阅扩展的文档获取详细信息。
服务器与VS代码客户端之间的所有其他通信均通过以下传输通道完成,具体取决于扩展:
- SSH:经过认证且安全的SSH隧道。
- 容器:Docker 配置的通信通道(通过
Docker 执行官). - WSL:一个随机的本地端口。
你可以在网络连接文章中找到VS Code本身需要访问的位置列表。
为什么我在使用 Remote - 扩展时,无法在 Container Tools 扩展中看到本地容器?
默认情况下,容器工具扩展将远程运行。虽然在某些情况下这是合理的默认选择,但这意味着当VS Code连接到远程SSH主机、容器或WSL时,扩展可能不会显示本地容器。
你可以使用以下解决方案之一来解决这个问题:
-
打开一个新的本地窗口(文件>新窗口),并用它来处理本地容器。
-
仅限WSL:使用Docker Technical Preview for WSL 2,或配置Docker Desktop用于WSL 1。
-
仅限开发容器:转发 Docker socket,并在容器中安装 Docker CLI(仅限)。
-
使用extensionKind属性强制扩展为
UI(界面).不过,这会阻止某些命令生效。
使用远程开发需要在主机上安装哪些Linux包或库?
远程开发需要内核>= 4.18,glibc >=2.28,libstdc++ >= 3.4.25。基于 glibc 的最新 x86_64 版本支持最好,但具体要求因发行版而异。
开发容器和WSL扩展支持基于musl的Alpine Linux,远程SSH版本支持ARMv7l(AArch32)/ ARMv8l(AArch64)。然而,某些扩展中的原生依赖可能导致它们无法在非 Glibc x86_64 分布上工作。请注意,实验性的ARMv8l(AArch64)仅在VS Code Insiders中提供。
更多详情请参见 Linux 远程开发。
我可以在较旧的Linux发行版上运行VS Code服务器吗?
从VS Code 1.99版本(2025年3月)开始,VS Code 发布的预构建服务器仅兼容基于 glibc 2.28 或更高版本的 Linux 发行版。例如,这些包括Debian 10、RHEL 8或Ubuntu 20.04。
如果提供包含这些库版本的 sysroot,VS Code 仍允许用户通过 Remote - SSH 扩展连接不支持 VS Code 的作系统(不支持 glibc >= 2.28 和 libstdc++ >= 3.4.25)。这种方法让你和你的组织有更多时间迁移到更新的Linux发行版。
| VS Code 版本 | 基础需求 | 注释 |
|---|---|---|
| >= 1.99.x | kernel >= 4.18, glibc >=2.28, libstdc++ >= 3.4.25, binutils >= 2.29 | <没有> |
这种方法是一种技术变通,并非官方支持的使用场景。
请按照以下步骤配置您的环境以应对此变通方法:
-
构建sysroot代码
我们建议使用 Crosstool-ng 来构建 sysroot。以下是一些你可以开始的示例配置:
以下示例容器也可用于安装安装 Crosstool-ng 的环境:
FROM ubuntu:latest RUN apt-get update RUN apt-get install -y gcc g++ gperf bison flex texinfo help2man make libncurses5-dev \ python3-dev autoconf automake libtool libtool-bin gawk wget bzip2 xz-utils unzip \ patch rsync meson ninja-build # Install crosstool-ng RUN wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.26.0.tar.bz2 RUN tar -xjf crosstool-ng-1.26.0.tar.bz2 RUN cd crosstool-ng-1.26.0 && ./configure --prefix=/crosstool-ng-1.26.0/out && make && make install ENV PATH=$PATH:/crosstool-ng-1.26.0/out/bin一旦你准备好了带有 Crosstool-ng 和相关配置的环境,执行以下命令生成 sysroot
mkdir toolchain-dir cd toolchain-dir cp <path-to-config-file> .config ct-ng build -
VS Code 服务器在安装过程中使用 patchelf 来消耗 sysroot 所需的库。
斑点v0.17.x已知会导致远程服务器的分隔错误,我们建议使用 Patchelf>=v0.18.x
-
在远程主机上安装 patchelf 二进制文件和 sysroot
-
创建以下3个环境变量:
你现在可以通过 Remote - SSH 扩展连接到遥控器。成功连接后,VS Code 会显示对话框和提示,表示该连接不被支持。
我可以安装单独的扩展包,而不是扩展包吗?
是的。远程开发扩展包为你提供了方便的方式,让你随时访问所有最新的远程功能。不过,你也可以从市场或VS Code扩展视图中安装各个扩展。
我该如何审查和配置扩展设置?
与Visual Studio Code的其他部分一样,你可以通过每个远程开发扩展的设置来自定义。以开发容器为例,你可以通过在扩展视图中打开扩展(⇧⌘X(Windows,Linux Ctrl+Shift+X))并导航到功能贡献,查看所有开发容器设置列表:

女子超级联赛
扩展相比使用末端线有什么优势?
你可以把 WSL 想象成一台运行在 Windows 上的 Linux 机器,你可以安装 Linux 专用的框架/工具(例如 Python、Go、Rust 等),而不会影响你的 Windows 设置。然后你可以使用 VS Code 和 WSL 扩展,在 WSL 安装的环境中开发,与 Windows 上安装的内容隔离开来。
例如,你可以在WSL中安装Go协议栈(编译器、调试器、linters等)。如果你只在Windows上运行VS Code,也必须在Windows上安装同样的Go协议栈,才能获得智能补全、调试、Go to Definition导航等功能。而且因为语言服务运行在Windows上,他们不知道WSL里有什么。
确实,你可以在Windows中运行WSL中的二进制文件,反之亦然,但普通的VS Code扩展并不知道如何实现这一点。这就是我们最初支持WSL调试的方式,但很快意识到必须更新所有扩展才能了解WSL。
我们决定让VS Code的部分内容在WSL中运行,让Windows上的UI与运行WSL的VS Code服务器通信。这就是WSL扩展所支持的功能,Go扩展和其他Go工具(编译器、调试器、linters)一起在WSL中运行,而VS Code则运行在Windows上。
通过这种方法,像智能补全这样的语言功能可以直接对WSL运行,无需在Windows上设置任何东西。你不必担心路径问题,也不必在Windows上设置不同版本的开发栈。如果你是在Linux上部署应用,你可以设置WSL实例看起来像运行时环境,同时在Windows上获得丰富的编辑体验。
扩展作者
作为扩展作者,我需要做些什么?
VS Code 扩展 API 会抽象本地/远程细节,因此大多数扩展无需修改即可工作。然而,鉴于扩展可以使用任意节点模块或运行时,在某些情况下可能需要做出调整。我们建议你测试扩展(尤其是在容器中),以确保无需更新。详情请参见支持远程开发。
当用户远程连接时,扩展能否访问本地资源或API?
当VS Code连接到远程环境时,扩展被归类为UI扩展或工作区扩展。UI扩展运行于本地扩展主机中,可以贡献UI或个性化功能(例如主题),并访问本地文件或API。工作区扩展运行在远程扩展主机中,包含工作区,并拥有对源代码、远程文件系统和远程API的完全访问权限。虽然工作区扩展不专注于UI定制,但它们也可以贡献资源管理器、视图及其他UI元素。
当用户安装扩展时,VS Code 会根据扩展类型推断正确的位置并安装。不需要远程运行的扩展,比如主题和其他UI自定义,会自动安装在UI端。其他扩展都被视为工作区扩展,因为它们功能最完整。然而,扩展作者也可以用extensionKind财产package.json.
如果你的扩展程序没有按预期工作,可以检查它是否运行在正确的位置,或者可能应该有不同的位置extensionKind.另请参见支持远程开发,了解扩展作者需要了解的远程开发和代码空间相关信息。
许可与隐私
位置
你可以在这里找到VS Code远程开发扩展的许可证:
为什么远程开发扩展或其组件不是开源的?
Visual Studio Code 远程开发扩展及其相关组件采用开放的规划、问题和功能请求流程,但目前尚未开源。这些扩展共享源代码,这些源代码也被用于全托管的远程开发服务,如GitHub Codespaces及其相关扩展。
更多信息请参阅Visual Studio Code和“代码-开源软件”区别与Microsoft扩展许可相关文章。
远程开发扩展连接的地点有限制吗?
你可以自由使用这些扩展用于个人或企业用途,连接你自己的物理机器、虚拟机或容器。这些服务可以是本地部署、在你自己的私有云或数据中心、Azure或其他云/非云托管服务提供商中。你不能在扩展或相关组件之上构建公共产品或服务(见下一个问题)。
我可以使用VS Code远程开发扩展来构建自己的产品或服务吗?
你可以将这些扩展用于你自己的内部或私有服务。你不能在VS Code远程开发扩展或相关组件(例如VS Code Server)之上构建公共或商业服务。你无法创建其他扩展来扩展或作远程开发扩展。虽然许可证规定你不能“将软件作为独立或集成产品提供,也不能将其与你的任何应用程序结合供他人使用”,但你可以记录如何将扩展与服务结合使用。
我可以在自己的公共服务项目中重新打包或重用 VS Code Server吗?
不。许可证规定你不得“将软件作为独立或集成产品提供,或将其与你的任何应用程序结合供他人使用”,这意味着你不能在VS Code Server之上构建公共产品或服务。
我有个问题,关于我能否用扩展来做X,请问谁?
请提交争议。
GDPR和VS Code远程开发
VS Code 远程开发扩展遵循 GDPR 政策,就像 Visual Studio Code 本身一样。更多详情请参见通用常见问题解答。
问题或反馈
有问题或反馈吗?
- 请参阅技巧与窍门。
- 在Stack Overflow上搜索。
- 添加功能请求或报告问题。