利用远程隧道开发

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

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

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

远程隧道架构概述

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

入门指南

你有两条路径可以处理隧道:

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

我们将在下面的章节中介绍这两条路径。

使用“代码”CLI

你可以通过代码 CLI

  1. 安装代码在你想从VS Code客户端开发的远程机器上进行CLI作。CLI会在VS Code客户端和你的远程机器之间建立隧道。CLI会自动内置于VS Code Desktop中——无需额外设置。

    替代下载

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

    带有CLI高亮的VS Code下载选项

    你也可以通过远程机器的终端安装并解压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而不是代码.

  2. 创建一个安全隧道,使用隧道指挥:

    code tunnel
    

    该命令会下载并启动该机器上的 VS Code 服务器,然后创建一个隧道到它。

    注:当你首次在机器上启动隧道时,系统会提示你接受服务器许可条款。你也可以通过--接受-服务器-许可条款在命令行中以避免提示。

  3. 该CLI会输出一个与该远程机器绑定的 vscode.dev URL,例如:https://vscode.dev/tunnel/<machine_name>/<folder_name>.你可以在你选择的客户端上打开这个网址。

  4. 当你在这个客户端首次打开 vscode.dev URL时,会被提示登录你的GitHub账户,地点是https://github.com/login/oauth/authorize......网址。这会让你获得隧道服务的认证,确保你能访问正确的远程机器。

使用 VS Code 界面

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

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

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

  3. 系统会提示你登录 GitHub。一旦你登录,隧道会在你当前的机器上启动,你可以远程连接到这台机器。

    提示远程隧道访问已启用

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

注:远程机器只有在VS Code仍在运行时才能通过隧道访问。一旦退出 VS Code,就无法再隧道到它,除非你重新开始 VS Code 或运行代码隧道CLI 命令。

远程隧道延伸

你通过vscode.dev代码CLI或VS Code的UI预装了Remote - Tunnels扩展。

如果你已经在用 VS Code(桌面或网页版)工作,想连接远程隧道,可以直接安装并使用 Remote - Tunnels 扩展。安装扩展后,打开命令面板(F1),执行命令“远程隧道:连接到隧道”。你可以连接到任何有活跃隧道的远程机器。

你也可以在远程浏览器中查看你的远程机器,可以通过命令“远程浏览器:专注于远程视图”来进行:

带隧道的远程探测器视图

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

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

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

你可以同时使用远程隧道扩展和开发容器扩展,在远程主机上的容器中打开一个文件夹。你甚至不需要本地安装 Docker 客户端。

具体做法:

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

其余的开发容器快速入门功能按现状应用。你可以在 Dev Containers 扩展的文档中了解更多。如果你不满足需求,也可以查看“在远程Docker主机上开发”的文章,了解其他选项。

常见问题

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

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

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

我们发布了这个 VS Code Server 后端组件,作为一个你可以自行运行的服务(你可以在文档中阅读更多相关内容),而不是仅由远程开发扩展单独安装和管理。

访问VS代码服务器涉及几个环节:

  • VS Code 服务器:后端服务器,使 VS Code 远程体验成为可能。
  • 远程 - 隧道扩展:促进连接远程机器的扩展,那里有服务器实例运行。

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

VS Code 扩展 API 会抽象本地/远程细节,所以大多数扩展无需修改即可工作。然而,鉴于扩展可以使用任意节点模块或运行时,在某些情况下可能需要做出调整。我们建议您测试扩展,确保无需更新。详情请参见支持远程开发

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

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

我该如何移除隧道或机器?

如果你想通过CLI停止正在运行的隧道,可以用Ctrl + C结束活动隧道。如果你通过VS Code界面启用了隧道功能,可以在VS Code中执行命令“远程隧道:关闭远程隧道访问”

你可以通过运行来消除机器与隧道的关联代码隧道取消注册就在那台机器上。你也可以打开任意 VS Code 客户端,选择远程资源管理器视图,右键点击你想移除的机器,然后选择取消注册

隧道是如何保障安全的?

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

一旦你从远程VS Code实例连接,就会通过隧道建立SSH连接,以实现端到端加密。目前该加密的首选密码是 CTR 模式下的 AES 256,实现该代码是开源的。

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

隧道服务有使用限制吗?

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

比如,现在你的账户可以注册10条隧道。如果你想创建一个新隧道,并且已经注册了另外10条,CLI会随机选择一条未使用的隧道并删除它。请注意,这一限制可能会有所更改。

我可以在组织内部配置策略吗?

如果你所在的组织想要控制端口转发的访问,可以通过允许或拒绝对该域的访问来实现global.rel.tunnels.api.visualstudio.com.

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

我怎样才能确保我的隧道继续运行?

你有几个选择:

  • 使用该服役经历命令以服务形式运行。你可以跑了代码隧道服务安装以及代码隧道服务卸载安装和拆卸它们。
  • 使用该不睡觉选项,代码隧道——无眠,以防止你的远程机器进入睡眠状态。

如同代码CLI 文档,你可以通过以下方式探索所有可能的CLI命令和选项代码隧道——求助.

在隧道过程中,我可以使用其他远程开发扩展或开发容器吗?

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