使用远程隧道 (Remote Tunnels) 进行开发

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

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

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

Remote Tunnels architecture overview

无论您的代码托管在哪里,VS Code 都能提供本地质量的开发体验——包括完整的 IntelliSense(自动补全)、代码导航和调试。

开始使用

您有两种使用隧道的方法:

这两种方法都能实现相同的隧道功能——您可以根据自己的习惯选择最合适的工具。如果您无法在远程机器上安装完整的 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 download options with CLI highlighted

    您也可以通过远程机器的终端安装并解压 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

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

    code tunnel
    

    该命令会在当前机器上下载并启动 VS Code Server,然后为其创建隧道。

    注意:首次在机器上启动隧道时,系统会提示您接受服务器许可条款。您也可以在命令行中传入 --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 UI

  1. 在您想要开启隧道访问权限的远程机器上打开 VS Code。

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

    Turn on Remote Tunnel Access via the VS Code Account menu

  3. 系统会提示您登录 GitHub。登录后,隧道将在当前机器上启动,您就可以远程连接到这台机器了。

    Prompt that remote tunnel access is enabled

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

注意:远程机器仅在 VS Code 运行期间可通过隧道访问。一旦您退出 VS Code,将无法再通过隧道连接到它,除非您再次在远程机器上启动 VS Code 或运行 code tunnel CLI 命令。

Remote Tunnels 扩展

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

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

您还可以在“远程资源管理器”中查看您的远程机器,可以通过运行命令远程资源管理器: 聚焦远程视图 (Remote Explorer: Focus on Remote View) 来聚焦该视图。

Remote Explorer view with Tunnels

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

VS Code remote indicator connected to a remote tunnel

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

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

操作步骤如下:

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

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

常见问题

Remote Tunnels、VS Code Server 和远程开发之间的关系是什么?

Visual Studio Code 远程开发 (Remote Development) 允许您将容器、远程机器或适用于 Linux 的 Windows 子系统 (WSL) 用作功能完备的开发环境。

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

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

访问 VS Code Server 涉及几个组件:

  • VS Code Server:使 VS Code 远程体验成为可能的后端服务器。
  • Remote - Tunnels 扩展:促进与远程机器连接的扩展,在该机器上您运行着该服务器的一个实例。

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

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 installcode tunnel service uninstall 来安装和移除服务。
  • 使用 no-sleep 选项,即 code tunnel --no-sleep,以防止您的远程机器进入睡眠状态。

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

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

可以!目前,您可以通过 Remote - Tunnels 连接到 WSL开发容器

© . This site is unofficial and not affiliated with Microsoft.