使用远程隧道进行开发

Visual Studio Code 的 Remote - Tunnels 扩展允许您通过安全隧道连接到远程机器,如台式电脑或虚拟机(VM)。您可以从任何地方的 VS Code 客户端连接到该机器,而无需 SSH。

隧道安全地通过Microsoft dev tunnels将数据从一个网络传输到另一个网络。

这可以消除在您的VS Code客户端机器上需要源代码的需求,因为扩展直接在远程机器上运行命令和其他扩展。扩展将在远程操作系统上安装VS Code服务器;该服务器独立于远程操作系统上任何现有的VS Code安装。

远程隧道架构概览

VS Code 可以提供本地质量的开发体验 - 包括完整的智能感知(补全)、代码导航和调试 - 无论您的代码托管在何处

入门指南

你有两种处理隧道的方式:

  • 运行code 命令行界面 (CLI)tunnel命令。
  • 通过VS Code桌面用户界面启用隧道功能。

这两种路径都能实现相同的隧道功能——你可以使用最适合你的工具。如果你无法在远程机器上安装完整的VS Code桌面版,CLI是一个很好的选择。如果你已经在VS Code中进行了一些工作,并且希望为当前机器启用隧道功能,使用VS Code桌面版UI会非常方便。

我们将在下面的部分中描述这两种路径。

使用 'code' CLI

您可以通过code CLI创建和使用隧道。

  1. 在您希望通过VS Code客户端进行开发的远程机器上安装code CLI。CLI在VS Code客户端和您的远程机器之间建立了一个隧道。CLI已自动内置在VS Code桌面版中——无需额外设置。

    替代下载

    或者,您可以通过我们的下载页面上的独立安装获取CLI,这与VS Code桌面安装是分开的:

    VS Code 下载选项,CLI 已高亮显示

    你也可以通过远程机器的终端安装和解压CLI。如果你的远程机器没有用户界面,这可能特别有用:

    curl -Lk 'https://code.visualstudio.com/sha/download?build=stable&os=cli-alpine-x64' --output vscode_cli.tar.gz
    
    tar -xf vscode_cli.tar.gz
    

    注意: 如果您使用的是独立或终端安装,以下部分中的命令将以./code开头,而不是code

  2. 使用tunnel命令创建一个安全隧道:

    code tunnel
    

    此命令下载并在此机器上启动VS Code服务器,然后创建一个隧道连接到它。

    注意: 当您首次在机器上启动隧道时,系统会提示您接受服务器许可条款。您也可以在命令行中传递 --accept-server-license-terms 以避免提示。

  3. 此CLI将输出一个与此远程机器绑定的vscode.dev URL,例如https://vscode.dev/tunnel//。您可以在选择的客户端上打开此URL。

  4. 当您首次在此客户端上打开vscode.dev URL时,系统会提示您在https://github.com/login/oauth/authorize... URL上登录您的GitHub账户。这将验证您对隧道服务的访问权限,以确保您可以访问正确的远程机器集。

使用 VS Code 用户界面

  1. 在您希望开启隧道访问的远程机器上打开 VS Code。

  2. 在VS Code账户菜单中,选择开启远程隧道访问选项,如下图所示。你也可以在VS Code中打开命令面板(F1)并运行命令Remote Tunnels: Turn on Remote Tunnel Access...

    通过VS Code账户菜单开启远程隧道访问

  3. 您将被提示登录GitHub。一旦登录成功,将在您的当前机器上启动一个隧道,您将能够远程连接到这台机器。

    提示远程隧道访问已启用

  4. 在您选择的客户端中,您可以从上面的通知中打开vscode.dev链接并开始编码!

注意: 远程机器只有在 VS Code 保持运行的情况下才能通过隧道访问。一旦你退出 VS Code,除非你再次在那里启动 VS Code 或运行 code tunnel CLI 命令,否则将无法再通过隧道访问它。

远程隧道扩展

通过code CLI或VS Code UI打开的vscode.dev实例预装了Remote - Tunnels扩展。

如果您已经在 VS Code(桌面版或网页版)中工作,并且希望连接到远程隧道,您可以直接安装并使用 Remote - Tunnels 扩展。安装扩展后,打开命令面板(F1)并运行命令 Remote Tunnels: Connect to Tunnel。您将能够连接到任何具有活动隧道的远程机器。

您还可以在远程资源管理器中查看您的远程机器,您可以通过命令Remote Explorer: Focus on Remote View来聚焦于远程视图:

远程资源管理器视图与隧道

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

VS Code 远程指示器连接到远程隧道

在容器中打开远程隧道主机上的文件夹

你可以使用 Remote - Tunnels 和 Dev Containers 扩展一起在容器内打开远程主机上的文件夹。你甚至不需要在本地安装 Docker 客户端。

要这样做:

  1. 按照安装步骤在远程主机上安装Docker,并在本地安装VS Code和Dev Containers扩展。
  2. 按照Getting Started中的说明,为Remote - Tunnels扩展设置隧道,连接到它并在那里打开一个文件夹。
  3. 使用Dev Containers: Reopen in Container命令从命令面板(F1, ⇧⌘P (Windows, Linux Ctrl+Shift+P))。

其余的Dev Containers 快速入门同样适用。您可以在其文档中了解更多关于Dev Containers 扩展的信息。如果此模型不符合您的需求,您还可以查看在远程 Docker 主机上开发文章以获取其他选项。

常见问题

远程隧道、VS Code 服务器和远程开发之间的关系是什么?

Visual Studio Code 远程开发 允许您使用容器、远程机器或Windows子系统用于Linux(WSL)作为全功能的开发环境。

远程开发允许您的本地VS Code安装通过将某些命令的执行移动到“远程服务器”(即VS Code服务器)来透明地与其他机器(无论是虚拟的还是物理的)上的源代码和运行时环境进行交互。当您连接到远程端点时,VS Code会快速安装VS Code服务器,并且可以托管与远程工作区、机器和文件系统直接交互的扩展。

我们已经发布了这个VS Code Server后端组件作为您可以自己运行的服务(您可以在其文档中了解更多信息),而不仅仅是由Remote Development扩展安装和管理。

访问VS Code服务器涉及几个组件:

  • VS Code 服务器:使 VS Code 远程体验成为可能的后端服务器。
  • Remote - Tunnels 扩展:此扩展有助于连接到远程机器,该机器上运行着服务器实例。

作为扩展作者,我需要做什么?

VS Code 扩展 API 抽象了本地/远程的细节,因此大多数扩展无需修改即可工作。然而,鉴于扩展可以使用任何他们想要的 node 模块或运行时,有时可能需要进行调整。我们建议您测试您的扩展,以确保不需要更新。详情请参见 支持远程开发

多个用户或客户端可以同时访问同一个远程实例吗?

不,服务器实例设计为一次只能由一个用户或客户端访问。

如何移除隧道或机器?

如果你想停止通过CLI运行的隧道,你可以使用Ctrl + C来结束活动的隧道。如果你已经通过VS Code UI启用了隧道功能,你可以在VS Code中运行命令Remote Tunnels: Turn off Remote Tunnel Access...

您可以通过在该机器上运行code tunnel unregister来移除机器与隧道的关联。您也可以打开任何VS Code客户端,选择远程资源管理器视图,右键点击您想要移除的机器,然后选择取消注册

隧道是如何保证安全的?

无论是托管还是连接到隧道,都需要在两端使用相同的Github或Microsoft账户进行身份验证。在这两种情况下,VS Code都会向托管在Azure中的服务发起出站连接;通常不需要更改防火墙设置,VS Code也不会设置任何网络监听器。

一旦你从远程的VS Code实例连接,就会通过隧道创建一个SSH连接以提供端到端加密。当前首选的加密方式是AES 256 CTR模式,实现此功能的代码是开源的

您可以了解更多关于底层开发隧道服务的安全性信息,请参阅其文档

隧道服务有使用限制吗?

为了避免滥用底层隧道服务,对资源如隧道数量和带宽设置了使用限制。我们预计大多数用户永远不会达到这些限制。

例如,目前您可以为您的账户注册10个隧道。如果您想创建一个新的隧道,但已经注册了10个其他隧道,CLI将随机选择一个未使用的隧道并删除它。请注意,此限制可能会发生变化。

如果您遇到了使用限制,并希望讨论增加使用量,我们很乐意了解更多信息。请通过vscodeserver@microsoft.com联系我们,提供您的使用场景和所需的使用量信息。

我可以在整个组织中配置策略吗?

如果您是一个组织的成员,该组织希望控制对端口转发的访问,您可以通过允许或拒绝访问域名 global.rel.tunnels.api.visualstudio.com 来实现。

对于运行Windows设备的用户,您还可以配置并部署开发隧道的组策略设置。您可以在开发隧道文档中了解更多信息。

如何确保我的隧道持续运行?

你有几个选择:

  • 使用service命令作为服务运行。您可以运行code tunnel service installcode tunnel service uninstall来安装和移除它们。
  • 使用no-sleep选项,code tunnel --no-sleep,以防止您的远程机器进入睡眠状态。

code CLI 文档中所述,您可以通过code tunnel --help探索所有可能的 CLI 命令和选项。

我可以在隧道连接时使用其他远程开发扩展或开发容器吗?

是的!目前,您可以通过远程隧道连接到WSL开发容器