远程 SSH:技巧和窍门
2019 年 10 月 3 日,作者:Sana Ajani,@sana_ajani
在之前的远程 SSH 博客文章中,我们介绍了如何设置 Linux 虚拟机,并使用 Visual Studio Code 中的Remote - SSH 扩展连接到该虚拟机。在本篇博客文章中,我们将介绍一些技巧和窍门,您可以使用这些技巧和窍门来充分利用您的远程设置。
使用远程 SSH 连接
Visual Studio Code Remote - SSH 扩展程序允许您使用 SSH 从 VS Code 内部连接到远程计算机或虚拟机。如果您尚未安装该扩展程序,可以在扩展视图中搜索“remote ssh”(⇧⌘X (Windows、Linux Ctrl+Shift+X))。
安装扩展程序后,您会在状态栏的左下角看到一个指示器。此指示器告诉您 VS Code 在哪个上下文中运行(本地或远程)。单击指示器会显示远程扩展命令列表。
SSH 配置文件
在之前的远程 SSH 博客文章中,我们仅连接到一台计算机,并且在提示时输入“user@host”进行连接。如果您定期登录多个远程服务器或本地虚拟机,则有一种更好的连接方法,无需记住所有用户名、地址和其他配置选项。
OpenSSH 支持使用配置文件来存储所有不同的 SSH 连接。要使用 SSH 配置文件,请单击远程指示器以显示远程命令,选择“打开配置文件”,然后选择路径“Users/{您的用户名}/.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
有时您可能需要从桌面或笔记本电脑通过公司的 Intranet 或防火墙连接到远程计算机。在这种情况下,您可能正在使用中间服务器或跳转主机。如果您在配置为仅接受来自一组固定主机的 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
离线远程计算机
如果受到防火墙的限制,或者您的公司锁定了您的 VM 并且它们无法连接到 Internet,则 Remote - SSH 扩展程序将无法连接到您的 VM,因为 VS Code 需要将一个名为 VS Code Server 的组件下载到远程计算机。
但是,您现在可以通过 Remote - SSH 扩展程序中的新的用户设置来解决此问题。如果您启用设置 remote.SSH.allowLocalServerDownload
,该扩展程序将首先在客户端上安装 VS Code Server,然后通过 SCP 将其复制到服务器。
注意:这目前是一项实验性功能,但在下一个版本中将默认启用。
Remote - SSH Nightly 扩展
如果您有兴趣在可用时立即测试新更新和实验性功能,请安装Remote - SSH Nightly 扩展程序(首先卸载 Remote-SSH 稳定扩展程序)。这是该扩展程序的每日构建版本,我们在其中尝试新功能和设置,然后再将其发布到稳定版本中。
我们希望收到您的反馈
感谢您试用 Remote - SSH 扩展程序!如果您遇到任何问题,或者想为我们建议新功能或场景,请在我们的 GitHub 存储库上打开一个问题。如果您想查看我们目前正在开发或即将推出的功能,请查看我们的远程开发发行说明和迭代计划。您还可以试用入门级的 通过 SSH 进行远程开发教程,该教程将指导您使用其他远程扩展程序在 Docker 容器和适用于 Linux 的 Windows 子系统 (WSL) 中工作。
祝您远程编码愉快,
Sana Ajani,VS Code 项目经理 @sana_ajani