在 VS Code 中试试

远程 SSH:提示与技巧

2019 年 10 月 3 日,作者:Sana Ajani,@sana_ajani

在之前的一篇远程 SSH 博客文章中,我们介绍了如何在 Visual Studio Code 中设置 Linux 虚拟机并使用远程 - SSH 扩展连接到该虚拟机。在这篇博客文章中,我们将深入探讨一些提示和技巧,帮助您充分利用远程设置。

使用远程 SSH 连接

Visual Studio Code 远程 - SSH 扩展允许您在 VS Code 中通过 SSH 连接到远程机器或虚拟机。如果您尚未安装此扩展,可以在“扩展”视图中搜索“remote ssh”(⇧⌘X (Windows, Linux Ctrl+Shift+X))。

Remote - SSH extension

安装扩展后,您会在状态栏的左下角看到一个指示器。此指示器会告诉您 VS Code 正在哪个上下文(本地或远程)中运行。单击该指示器可以调出远程扩展命令列表。

Remote extension commands

SSH 配置文件

在之前的远程 SSH 博客文章中,我们只连接了一台机器,并且在提示时输入“user@host”进行连接。如果您需要定期登录多个远程服务器或本地虚拟机,有一种更好的连接方式,无需记住所有用户名、地址和额外的配置选项。

OpenSSH 支持使用配置文件来存储所有不同的 SSH 连接。要使用 SSH 配置文件,请单击远程指示器以调出远程命令,选择打开配置文件,然后选择路径为“Users/{yourusername}/.ssh/config”的文件。

Open Configuration File command

这是一个 SSH 配置文件示例

# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host python-linux-vm
    HostName <vm address>
    User sana
    IdentityFile ~/.ssh/id_python_vm

Host node-vm
    HostName <vm address>
    User sana
    Port 5522
    IdentityFile ~/.ssh/id_node_vm

在 SSH 配置文件格式中,您可以指定更多配置选项。在此文件中,您将获得补全和着色功能,并且可以按 (⌃Space (Windows, Linux Ctrl+Space)) 以通过 IntelliSense 了解更多配置选项。

上面使用的选项是

选项 描述
Host 您的主机机器的一个易于记忆的别名。
HostName 服务器的主机名(您可以使用服务器的 IP 地址)。
User 您指定通过 SSH 登录机器的用户。
Port 用于通过 SSH 连接的端口。默认端口是 22,但如果您指定了唯一的端口,可以在此处进行配置。
IdentityFile 您存储私钥的文件位置。

您可以添加所有主机的信息。保存配置文件后,您将在远程资源管理器中看到这些主机,以及在该主机上打开的任何文件夹。您可以选择每个主机或文件夹旁边的图标,它将启动一个新的 VS Code 窗口(实例)并连接到该主机。在下面的截图中,我已连接到我的远程机器“python-linux-vm”,远程资源管理器向我显示了我过去连接过的文件夹,以及来自远程机器的任何转发端口。

Connected to python-linux-vm host machine

ProxyCommand

有时您可能需要通过公司内网或防火墙从您的台式机或笔记本电脑连接到远程机器。在这种情况下,您可能会使用中间服务器或跳板机。如果您在只接受来自固定主机集的 SSH 连接的安全系统中工作,这种设置会很有用。

要将跳板机设置与远程 - SSH 扩展一起使用,您可以使用 ProxyCommand 配置选项。此配置将打开到跳板机的后台 SSH 连接,然后通过私有 IP 地址连接到目标。

您可以在 SSH 配置文件中这样设置 ProxyCommand 配置选项

# Jump box with public IP address
Host jump-box
    HostName 52.179.157.97
    User sana
    IdentityFile ~/.ssh/jumpbox

# Target machine with private IP address
Host target-box
    HostName <IP address of target>
    User sana
    IdentityFile ~/.ssh/target
    ProxyCommand ssh -q -W %h:%p jump-box

ControlMaster

如果您使用除基于密钥的身份验证之外的其他身份验证方法连接到远程 SSH 主机,例如双因素、基于密码或带有密码短语的 SSH 密钥,您可能需要多次输入所需信息。

您可以使用 ControlMaster 选项(仅适用于 macOS/Linux 客户端)来重用现有连接,而不是打开多个 SSH 连接,从而减少输入密码短语的次数。

要使用此功能,请将以下内容添加到您的 SSH 配置文件中

Host *
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h-%p
    ControlPersist 600

离线远程机器

如果您的虚拟机受防火墙限制或公司锁定,无法连接到 Internet,则远程 - SSH 扩展将无法连接到您的虚拟机,因为 VS Code 需要将一个名为 VS Code Server 的组件下载到远程机器。

但是,您现在可以通过远程 - SSH 扩展中的一个新用户设置来解决此问题。如果您启用设置 remote.SSH.allowLocalServerDownload,该扩展将首先在客户端上安装 VS Code Server,然后通过 SCP 将其复制到服务器。

注意:这目前是一个实验性功能,但在下一个版本中将默认启用。

远程 - SSH 夜间版扩展

如果您有兴趣在新更新和实验性功能可用时立即进行测试,请安装远程 - SSH 夜间版扩展(请先卸载远程 - SSH 稳定版扩展)。这是该扩展的夜间构建版本,我们会在将其发布到稳定版本之前,在此版本中尝试新功能和设置。

我们希望获得您的反馈

感谢您试用远程 - SSH 扩展!如果您遇到任何问题,或者想向我们建议新功能或场景,请在我们的 GitHub 仓库中提出问题。如果您想了解我们当前正在开发或即将推出的功能,请查看我们的远程开发发行说明迭代计划。您还可以尝试入门级的通过 SSH 进行远程开发教程,该教程将引导您使用其他远程扩展在 Docker 容器和 适用于 Linux 的 Windows 子系统 (WSL) 中工作。

愉快的远程编码!

Sana Ajani,VS Code 项目经理 @sana_ajani