尝试以扩展 VS Code 中的代理模式!

远程 SSH:使用技巧与窍门

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

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

使用远程 SSH 连接

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

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 连接的安全系统中工作,这种设置会很有用。

要将跳板机设置与 Remote - 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,那么 Remote - SSH 扩展将无法连接到您的虚拟机,因为 VS Code 需要将一个名为 VS Code 服务器的组件下载到远程计算机。

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

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

Remote - SSH 每夜版扩展

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

我们期待您的反馈

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

远程编码愉快!

Sana Ajani,VS Code 项目经理 @sana_ajani