使用远程隧道进行开发
Visual Studio Code 远程 - 隧道 扩展允许你通过安全隧道连接到远程计算机,例如台式电脑或虚拟机 (VM)。你可以在任何地方使用 VS Code 客户端连接到该计算机,无需 SSH。
隧道通过 Microsoft 开发隧道安全地将数据从一个网络传输到另一个网络。
这可以消除在 VS Code 客户端计算机上保存源代码的需要,因为该扩展直接在远程计算机上运行命令和其他扩展。该扩展将在远程操作系统上安装 VS Code Server;该服务器独立于远程操作系统上任何现有的 VS Code 安装。

VS Code 可以提供本地质量的开发体验——包括完整的 IntelliSense(代码补全)、代码导航和调试——无论你的代码托管在哪里。
开始使用
你有两种方式使用隧道:
- 运行
code命令行界面 (CLI) 的tunnel命令。 - 通过 VS Code 桌面 UI 启用隧道。
这两种方式都会产生相同的隧道功能——你可以使用最适合你的工具。如果你无法在远程计算机上安装完整的 VS Code 桌面版,CLI 是一个很好的选择。如果你已经在 VS Code 中进行一些工作,然后想为当前计算机启用隧道,使用 VS Code 桌面 UI 会很方便。
我们将在下面的章节中描述这两种方式。
使用“code”CLI
你可以通过 code CLI 创建和使用隧道。
-
在你希望从 VS Code 客户端进行开发的远程计算机上安装
codeCLI。CLI 在 VS Code 客户端和你的远程计算机之间建立隧道。CLI 已自动内置到 VS Code 桌面版中——无需额外设置。替代下载方式
另外,你也可以通过我们下载页面上的 独立安装程序 获取 CLI,该安装程序独立于 VS Code 桌面版安装。

你也可以通过远程计算机的终端安装和解压 CLI。如果你的远程计算机没有 UI,这可能会特别有用。
curl -Lk 'https://vscode.js.cn/sha/download?build=stable&os=cli-alpine-x64' --output vscode_cli.tar.gz tar -xf vscode_cli.tar.gz注意: 如果你使用独立安装或终端安装,以下章节中的命令将以
./code而非code开头。 -
使用
tunnel命令创建安全隧道code tunnel此命令在此计算机上下载并启动 VS Code Server,然后创建一个隧道连接到它。
注意: 当你第一次在一台机器上启动隧道时,系统会提示你接受服务器许可条款。你也可以在命令行中传递
--accept-server-license-terms以避免提示。 -
此 CLI 将输出一个与此远程机器绑定的 vscode.dev URL,例如
https://vscode.dev/tunnel/<machine_name>/<folder_name>。你可以在你选择的客户端上打开此 URL。 -
当在此客户端上首次打开 vscode.dev URL 时,系统会提示你登录 GitHub 帐户,网址为
https://github.com/login/oauth/authorize...。这将验证你是否已获得隧道服务的访问权限,以确保你可以访问正确的远程计算机集。
使用 VS Code UI
-
在你希望开启隧道访问的远程计算机上打开 VS Code。
-
在 VS Code 帐户菜单中,选择 Turn on Remote Tunnel Access 选项,如下图所示。你也可以在 VS Code 中打开命令面板 (F1) 并运行命令 Remote Tunnels: Turn on Remote Tunnel Access...。

-
系统将提示你登录 GitHub。登录后,隧道将在你当前的机器上启动,你将能够远程连接到这台机器。

-
在你选择的客户端中,你可以打开上述通知中的 vscode.dev 链接,然后开始编写代码!
注意: 只有当 VS Code 在远程计算机上保持运行时,才能通过隧道访问该远程计算机。一旦退出 VS Code,就无法通过隧道连接到它,除非你再次在该计算机上启动 VS Code 或运行
code tunnelCLI 命令。
远程隧道扩展
你通过 code CLI 或 VS Code UI 打开的 vscode.dev 实例预装了远程 - 隧道扩展。
如果你已经在 VS Code(桌面版或网页版)中工作,并且想要连接到远程隧道,你可以直接安装并使用 远程 - 隧道 扩展。安装扩展后,打开命令面板 (F1) 并运行命令 Remote Tunnels: Connect to Tunnel。你将能够连接到任何具有活动隧道的远程机器。
你也可以在远程资源管理器中查看你的远程机器,你可以通过命令 Remote Explorer: Focus on Remote View 来聚焦它。

与其他的远程开发扩展一样,你的远程机器的名称将显示在左下角的绿色远程指示器中。点击此指示器是探索远程隧道命令的另一种方式,同时还有关闭远程连接或安装 VS Code 桌面版的选项。

在容器中打开远程隧道主机上的文件夹
你可以结合使用远程 - 隧道和 开发容器 扩展,在容器内部打开远程主机上的文件夹。你甚至无需在本地安装 Docker 客户端。
操作步骤如下:
- 遵循在远程主机上安装 Docker 以及在本地安装 VS Code 和开发容器扩展的 安装 步骤。
- 遵循远程 - 隧道扩展的 入门 说明,设置隧道,连接到它并在其中打开文件夹。
- 从命令面板(F1,⇧⌘P (Windows, Linux Ctrl+Shift+P))使用 开发容器:在容器中重新打开 命令。
开发容器快速入门 的其余部分照常适用。你可以在 其文档 中了解有关开发容器扩展的更多信息。如果此模型不符合你的需求,你还可以查看 在远程 Docker 主机上开发 文章以获取其他选项。
常见问题
远程隧道、VS Code Server 和远程开发之间的关系是什么?
Visual Studio Code 远程开发 允许你将容器、远程机器或适用于 Linux 的 Windows 子系统 (WSL) 用作功能齐全的开发环境。
远程开发通过将某些命令的执行转移到“远程服务器”——VS Code Server——让你的本地 VS Code 安装透明地与源代码和运行时环境在其他机器(无论是虚拟还是物理)上进行交互。当你连接到远程端点时,VS Code 会快速安装 VS Code Server,并且该服务器可以托管直接与远程工作区、机器和文件系统交互的扩展。
我们已经将此 VS Code Server 后端组件作为一个可以自行运行的服务发布(你可以在 其文档 中阅读更多内容),而不仅仅是由远程开发扩展单独安装和管理。
访问 VS Code Server 涉及几个组件:
- VS Code Server:使 VS Code 远程体验成为可能的后端服务器。
- 远程 - 隧道扩展:促进连接到远程机器的扩展,在该机器上运行着服务器实例。
作为扩展作者,我需要做什么?
VS Code 扩展 API 抽象了本地/远程细节,因此大多数扩展无需修改即可工作。但是,考虑到扩展可以使用它们想要的任何节点模块或运行时,有时可能需要进行调整。我们建议你测试你的扩展,以确保不需要更新。有关详细信息,请参阅支持远程开发。
多个用户或客户端可以同时访问同一个远程实例吗?
不能,服务器的一个实例设计为一次只能由一个用户或客户端访问。
我如何移除隧道或机器?
如果你想停止通过 CLI 运行的隧道,可以使用 Ctrl + C 结束活动的隧道。如果你已通过 VS Code UI 启用隧道,你可以在 VS Code 中运行命令 Remote Tunnels: Turn off Remote Tunnel Access...。
你可以在该机器上运行 code tunnel unregister 来移除机器与隧道的关联。你也可以打开任何 VS Code 客户端,选择远程资源管理器视图,右键点击你想移除的机器,然后选择 unregister。
隧道是如何安全的?
托管和连接隧道都需要在两端使用相同的 Github 或 Microsoft 帐户进行身份验证。在这两种情况下,VS Code 都将向 Azure 中托管的服务发出出站连接;通常不需要防火墙更改,并且 VS Code 不会设置任何网络监听器。
一旦你从远程 VS Code 实例连接,就会通过隧道建立 SSH 连接,以提供端到端加密。当前此加密的首选密码是 CTR 模式下的 AES 256,实现此功能的代码是 开源的。
你可以在 其文档 中了解更多关于底层开发隧道服务的安全性信息。
隧道服务有使用限制吗?
为了避免滥用底层隧道服务,对隧道数量和带宽等资源设置了使用限制。我们预计大多数用户永远不会达到这些限制。
例如,目前你的帐户可以注册 10 个隧道。如果你想创建一个新隧道,并且已经注册了 10 个其他隧道,CLI 将随机选择一个未使用的隧道并删除它。请注意,此限制可能会更改。
我可以在我的组织中配置策略吗?
如果你所属的组织希望控制端口转发的访问,可以通过允许或拒绝访问域 global.rel.tunnels.api.visualstudio.com 来实现。
对于使用 Windows 设备的用户,您还可以配置并部署开发隧道的组策略设置。您可以在 开发隧道文档 中了解更多信息。
我如何确保我的隧道持续运行?
你有几个选择:
- 使用
service命令作为服务运行。你可以运行code tunnel service install和code tunnel service uninstall来安装和移除它们。 - 使用
no-sleep选项,即code tunnel --no-sleep,以防止远程机器进入睡眠状态。
如 code CLI 文档 中所述,你可以通过 code tunnel --help 探索所有可能的 CLI 命令和选项。