在 VS Code 中试试

远程 SSH:提示和技巧

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

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

使用远程 SSH 连接

Visual Studio Code Remote - SSH 扩展允许你使用 SSH 连接到远程机器或虚拟机,所有操作都在 VS Code 内部完成。如果你还没有安装此扩展,可以在扩展视图中搜索“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 连接,这种设置就很有用。

要将跳板机设置与 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

离线远程机器

如果你受到防火墙的限制,或者你的公司锁定你的虚拟机,并且它们无法连接到互联网,Remote - SSH 扩展将无法连接到你的虚拟机,因为 VS Code 需要下载一个名为 VS Code Server 的组件到远程机器上。

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

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

Remote - SSH 夜间版扩展

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

期待您的反馈

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

远程编码愉快!

Sana Ajani,VS Code 项目经理 @sana_ajani