使用远程隧道进行开发

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

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

这可以消除 VS Code 客户端计算机上的源代码的需要,因为扩展直接在远程计算机上运行命令和其他扩展。

建筑学

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

入门

您有两种使用隧道的途径:

这两条路径都会产生相同的隧道功能 - 您可以使用最适合您的工具。如果您无法在远程计算机上安装完整的 VS Code 桌面,那么 CLI 是一个不错的选择。如果您已经在 VS Code 中完成了一些工作,然后想要为当前计算机启用隧道,那么使用 VS Code 桌面 UI 会很方便。

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

使用“代码”CLI

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

  1. code在您想要从 VS Code 客户端进行开发的远程计算机上安装CLI。CLI 在 VS Code 客户端和远程计算机之间建立隧道。CLI 自动内置到 VS Code Desktop 中 - 无需额外设置。

    替代下载

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

    突出显示 CLI 的 VS Code 下载选项

    您还可以通过远程计算机的终端安装和解压 CLI。如果您的遥控器没有 UI,这可能特别有用:

    curl -Lk 'https://vscode.github.net.cn/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/<machine_name>/<folder_name>。您可以在您选择的客户端上打开此 URL。

  4. 在此客户端上首次打开 vscode.dev URL 时,系统会提示您通过某个https://github.com/login/oauth/authorize...URL 登录 GitHub 帐户。这将验证您对隧道服务的身份,以确保您能够访问正确的远程计算机集。

使用 VS Code 用户界面

  1. 在要打开隧道访问的远程计算机上打开 VS Code。

  2. 在 VS Code 帐户菜单中,选择“打开远程隧道访问”选项,如下图所示。您还可以在 VS Code 中打开命令面板 ( F1 ) 并运行命令远程隧道:打开远程隧道访问...。

    通过 VS Code 帐户菜单打开远程隧道访问

  3. 系统会提示您登录 GitHub。登录后,隧道将在您当前的计算机上启动,您将能够远程连接到该计算机。

    提示远程隧道访问已启用

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

注意:当 VS Code 仍在远程计算机上运行时,只能通过隧道访问远程计算机。退出 VS Code 后,将无法再通过隧道连接到它,直到您再次启动 VS Code 或运行code tunnelCLI 命令。

远程隧道扩展

您通过 CLI 或 VS Code UI 打开的 vscode.dev 实例code预装了远程 - 隧道扩展。

如果您已经在 VS Code(桌面或 Web)中工作并且想要连接到远程隧道,则可以直接安装并使用远程 - 隧道扩展。安装扩展后,打开命令面板 ( F1 ) 并运行命令Remote Tunnels: Connect to Tunnel。您将能够通过活动隧道连接到任何远程计算机。

您还可以在远程资源管理器中查看远程计算机,您可以通过命令远程资源管理器关注远程计算机:关注远程视图

带隧道的远程资源管理器视图

与其他远程开发扩展一样,远程计算机的名称将列在左下角的绿色远程指示器中。单击此指示器是探索远程隧道命令以及关闭远程连接或安装 VS Code Desktop 的选项的另一种方式。

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

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

如果您使用 Linux 计算机作为隧道主机,则可以一起使用远程 - 隧道和 Dev Containers 扩展来打开远程主机上容器内的文件夹。您甚至不需要在本地安装 Docker 客户端。

为此:

  1. 按照安装步骤在远程主机上安装 Docker,并在本地安装 VS Code 和 Dev Containers 扩展。
  2. 按照远程 - 隧道扩展的入门说明设置隧道、连接到该隧道并打开其中的文件夹。
  3. 使用“ Dev Containers :在命令面板中重新打开容器”命令(F1⇧⌘P(Windows、Linux Ctrl+Shift+P)。

Dev Containers 快速入门的其余部分按原样应用。您可以在其文档中了解有关 Dev Containers 扩展的更多信息。如果此模型不能满足您的需求,您还可以参阅在远程 Docker 主机上进行开发一文以了解其他选项。

常见问题

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

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

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

我们已将此 VS Code Server 后端组件发布为您可以自行运行的服务(您可以在其文档中阅读更多相关信息),而不是仅由远程开发扩展单独安装和管理。

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

  • VS Code 服务器:使 VS Code 远程体验成为可能的后端服务器。
  • 远程 - 隧道扩展:有助于连接到远程计算机(在远程计算机上运行服务器实例)的扩展。

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

VS Code 扩展 API 抽象了本地/远程详细信息,因此大多数扩展无需修改即可工作。但是,由于扩展可以使用它们想要的任何节点模块或运行时,因此在某些情况下可能需要进行调整。我们建议您测试您的扩展以确保不需要更新。详细信息请参见支持远程开发。

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

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

如何拆除隧道或机器?

如果您想停止通过 CLI 运行的隧道,可以使用Ctrl + C结束活动隧道。如果已通过 VS Code UI 启用隧道,则可以在 VS Code 中运行命令远程隧道:关闭远程隧道访问...。

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

隧道的安全如何保障?

托管和连接隧道都需要在每一端使用相同的 Github 或 Microsoft 帐户进行身份验证。在这两种情况下,VS Code 都会与 Azure 中托管的服务建立出站连接;通常不需要更改防火墙,并且 VS Code 不会设置任何网络侦听器。

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

如果您所在的组织想要控制对远程隧道的访问,则可以通过允许或拒绝对域的访问来实现global.rel.tunnels.api.visualstudio.com

您可以在其文档中了解有关底层开发隧道服务安全性的更多信息。

隧道服务有使用限制吗?

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

例如,现在您的帐户可以注册 5 个隧道。如果您想创建一个新隧道并且已经注册了另外 5 个隧道,CLI 将随机选择一个未使用的隧道并将其删除。请注意,此限制可能会发生变化。

如果您达到了限制并希望讨论如何获得更多使用量,我们很乐意了解更多信息。请联系我们,了解vscodeserver@microsoft.com有关您的场景以及您需要多少使用量的信息。

如何确保隧道保持运行?

您有几个选择:

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

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

在进行隧道传输时,我可以使用其他远程开发扩展或 Dev Containers 吗?

是的!目前,您可以通过远程隧道连接到WSL Dev Containers 。