远程 SSH:技巧和窍门
2019 年 10 月 3 日,作者:Sana Ajani,@sana_ajani
在之前的远程 SSH 博客文章中,我们介绍了如何设置 Linux 虚拟机并使用 Visual Studio Code 中的远程 - SSH 扩展连接到虚拟机。在这篇博客文章中,我们将介绍一些技巧和窍门,以帮助您充分利用远程设置。
使用远程 SSH 连接
Visual Studio Code 远程 - SSH 扩展允许您使用 SSH 连接到远程机器或虚拟机,所有操作都在 VS Code 内部完成。如果您尚未安装该扩展,可以在“扩展”视图中搜索“remote ssh”(⇧⌘X (Windows, Linux Ctrl+Shift+X))。
安装扩展后,您会注意到状态栏左下角有一个指示器。此指示器告诉您 VS Code 正在哪个上下文中运行(本地或远程)。单击指示器以调出远程扩展命令列表。
SSH 配置文件
在之前的远程 SSH 博客文章中,我们只连接到一台机器,并通过在提示时输入“user@host”来完成。如果您经常登录多个远程服务器或本地虚拟机,有一种更好的连接方式,无需记住所有用户名、地址和额外的配置选项。
OpenSSH 支持使用配置文件来存储所有不同的 SSH 连接。要使用 SSH 配置文件,请单击远程指示器以调出远程命令,选择打开配置文件,然后选择路径为“Users/{yourusername}/.ssh/config”的文件。
以下是 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”,远程资源管理器显示了我过去连接过的文件夹,以及远程机器转发的任何端口。
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 容器和Windows Linux 子系统 (WSL) 中工作。
远程编码愉快!
Sana Ajani,VS Code 项目经理 @sana_ajani