Visual Studio Code Remote - SSH 扩展允许你在任何具有运行中的 SSH 服务器的远程机器、虚拟机或容器上打开一个远程文件夹,并充分利用 VS Code 的功能集。一旦连接到服务器,你可以与远程文件系统上的任何地方的文件和文件夹进行交互。
为了获得这些好处,你的本地机器上不需要有源代码,因为该扩展直接在远程机器上运行命令和其他扩展。
这让 VS Code 提供了一个本地质量的开发体验 — 包括完整的 IntelliSense(补全)、代码导航和调试 — 无论你的代码在哪里托管。
开始使用
注意:在回顾了这个主题后,你可以从 SSH 的介绍性教程开始。
系统要求
本地。还必须安装一个支持 OpenSSH 的兼容 SSH 客户端。
远程 SSH 主机:一个运行中的 SSH 服务器在。
- x86_64 Debian 8+, Ubuntu 16.04+, CentOS / RHEL 7+.
- ARMv7l (AArch32) Raspbian Stretch/9+(32 位)。
- ARMv8l (AArch64) Ubuntu 18.04+ (64 位)。
- 使用官方 OpenSSH 服务器的 Windows 10 / Server 2016/2019(1803+)。
- macOS 10.14+ (Mojave) 启用远程登录的 SSH 主机。
其他基于 glibc 的 x86_64、ARMv7l(AArch32)和 ARMv8l(AArch64)的 Linux 发行版如果具备所需的先决条件,应该可以工作。请参阅 “使用 Linux 进行远程开发” 一文,以了解先决条件和获得社区支持的发行版运行的提示。
虽然 ARMv7l(AArch32)和 ARMv8l(AArch64)的支持是可用的,但由于在扩展中使用了 x86 本地代码,安装在这些设备上的一些扩展可能无法工作。
注意:虽然需要 1GB 内存(类似于 VS Code 的硬件要求),但建议至少有 2GB 内存和 2 核 CPU。
安装
要开始使用,你需要
- 安装一个 OpenSSH 兼容的 SSH 客户端,如果还没有的话。
- 安装 Visual Studio Code 或 Visual Studio Code Insiders。
- 安装远程开发扩展包。
SSH 主机设置
- 如果你没有设置 SSH 主机,请按照 Linux、Windows 10 / Server (1803+) 或 macOS SSH 主机的指示,或在 Azure 上创建一个 VM。
- [可选] 如果你的 Linux 或 macOS SSH 主机将被多个用户同时访问,可以考虑在 VS 代码用户设置中启用 Remote.SSH: Remote Server Listen On Socket,以提高安全性。
在设置编辑器中。
详见技巧和窍门文章。 - [可选] 虽然支持基于密码的认证,但我们建议为你的主机设置基于密钥的认证。详见技巧和窍门文章。
连接到一个远程主机
要首次连接到远程主机,请遵循以下步骤。
通过在终端 / PowerShell 窗口中运行以下命令来验证你可以连接到 SSH 主机,适当地替换掉 user@hostname。
ssh user@hostname
# Or for Windows when using a domain / AAD account
ssh user@domain@hostname
在 VS Code 中,从命令调板(F1,⇧ ⌘P)中选择 Remote-SSH: Connect to Host…,并使用与步骤 1 相同的 user@hostname。
- 如果 VS Code 不能自动检测到你所连接的服务器类型,会要求你手动选择类型。
一旦你选择了一个平台,它将被保存在 VS Code 设置中的 remote.SSH.remotePlatform 属性下,所以你可以随时改变它。 一会儿后,VS Code 将连接到 SSH 服务器并进行自我设置。VS Code 会用一个进度通知让你了解最新情况,你可以在远程 - SSH 输出通道中看到详细的日志。
提示。连接挂起或失败?请看故障排除提示,了解解决常见问题的信息。
如果你看到关于 SSH 文件权限的错误,请参阅修复 SSH 文件权限错误一节。
连接后,你会在一个空窗口中。你可以随时参考状态栏来查看你连接到了哪台主机。
点击状态栏项目将提供一个在你连接时的远程命令列表。- 然后,你可以使用文件 > 打开… 或文件 > 打开工作区… 来打开远程机器上的任何文件夹或工作区,就像你在本地一样
在这里,安装任何你想在连接到主机时使用的扩展程序,然后开始编辑!
注意:在 ARMv7l / ARMv8l glibc SSH 主机上,一些扩展可能无法工作,因为扩展内有 x86 编译的本地代码。
与远程主机断开连接
当你完成在远程主机上的文件编辑时,要关闭连接,选择文件 > 关闭远程连接来断开与主机的连接。默认配置不包括这个命令的键盘快捷方式。你也可以简单地退出 VS Code 来关闭远程连接。
记住主机和高级设置
如果你有一组经常使用的主机,或者你需要使用一些额外的选项连接到主机,你可以将它们添加到一个遵循 SSH 配置文件格式的本地文件中。
为了使设置变得简单,该扩展程序可以指导你添加主机,而不需要手工编辑这个文件。
首先从命令调色板(F1,⇧⌘P)中选择 Remote-SSH: Add New SSH Host…,或者点击活动栏中 SSH 远程浏览器的 Add New 图标。
然后你会被要求输入 SSH 连接信息。你可以输入一个主机名。
或者你用来从命令行连接到主机的完整 ssh 命令。
最后,你会被要求选择一个要使用的配置文件。如果你想使用一个不同于所列的配置文件,你也可以在你的用户设置. json 文件中设置 “remote.SSH.configFile” 属性。扩展程序会处理剩下的事情。
例如,在输入框中输入 ssh -i ~/.ssh/id_rsa-remote-ssh yourname@remotehost.yourcompany.com 会产生这个条目。
Host remotehost.yourcompany.com
User yourname
HostName another-host-fqdn-or-ip-goes-here
IdentityFile ~/.ssh/id_rsa-remote-ssh
关于生成这里显示的密钥的细节,请看技巧和窍门。你可以用 SSH 配置文件格式支持的任何东西来手动编辑这个文件,所以这只是一个例子。
从此以后,当你从命令调色板(F1,⇧ ⌘P)或在远程资源管理器的 SSH 目标部分选择 Remote-SSH: Connect to Host… 时,该主机将出现在主机列表中。
远程资源管理器允许你既可以在远程主机上打开一个新的空窗口,也可以直接打开你之前打开的文件夹。展开主机,点击你想在主机上打开的文件夹旁边的打开文件夹图标。
管理扩展
VS Code 在两个地方之一运行扩展:本地的用户界面 / 客户端,或远程的 SSH 主机。虽然影响 VS Code 用户界面的扩展,如主题和片段,被安装在本地,但大多数扩展将驻留在 SSH 主机上。这确保你有流畅的体验,并允许你从本地机器上为 SSH 主机上的特定工作区安装任何需要的扩展。这样一来,你就可以从不同的机器上重新开始,完成你的扩展。
如果你从扩展视图中安装一个扩展,它将自动安装在正确的位置。一旦安装完毕,你可以根据类别分组来判断一个扩展的安装位置。
将有一个类别用于你的远程 SSH 主机。
还有一个本地 — 已安装类别。
注意:如果你是一个扩展的作者,发现你的扩展不能正常工作或安装在错误的地方,请参阅支持远程开发以了解详情。
实际需要远程运行的本地扩展会在本地 - 安装类别中显示为暗淡和禁用。选择 “安装” 来在你的远程主机上安装一个扩展。
你也可以在 SSH 主机上安装所有本地安装的扩展,方法是进入扩展视图,使用 “本地 - 已安装” 标题栏右侧的云按钮选择在 SSH 中安装本地扩展:[主机名]。这将显示一个下拉菜单,你可以选择哪些本地安装的扩展要安装在 SSH 主机上。
“始终安装” 的扩展
如果你想在任何 SSH 主机上总是安装一些扩展,你可以使用 settings.json 中的 remote.SSH.defaultExtensions 属性指定哪些扩展。例如,如果你想安装 GitLens 和 Resource Monitor 扩展,指定它们的扩展 ID 如下。
"remote.SSH.defaultExtensions": [
"eamodio.gitlens",
"mutantdino.resourcemonitor"
]
高级。强制一个扩展在本地 / 远程运行 #。
扩展的设计和测试通常是为了在本地或远程运行,而不是同时运行。然而,如果一个扩展支持它,你可以在 settings.json 文件中强制它在一个特定的位置运行。
例如,下面的设置将强制 Docker 扩展在本地运行,并强制 Debugger for Chrome 扩展远程运行,而不是其默认值。
"remote.extensionKind": {
"ms-azuretools.vscode-docker": [ "ui" ],
"msjsdiag.debugger-for-chrome": [ "workspace" ]
}
值为 “ui” 而不是 “workspace” 将强制扩展在本地 UI / 客户端上运行,而不是在客户端上运行。通常情况下,这应该只用于测试,除非扩展的文档中另有说明,因为它可能会破坏扩展。详情请参见支持远程开发的文章。
转发一个端口 / 创建 SSH 隧道
有时在开发时,你可能需要访问一个远程机器上没有公开的端口。有两种方法可以做到这一点,使用 SSH 隧道将所需的远程端口 “转发” 到你的本地机器。
暂时转发一个端口
一旦你连接到一台主机,如果你想在会话期间临时转发一个新的端口,从命令调色板(F1,⇧ ⌘P)中选择转发一个端口,或者从活动栏中选择后点击远程资源管理器中的转发新端口图标。
你会被要求输入你想转发的端口,你可以给它起个名字。
一个通知会告诉你,你应该用哪个本地主机端口来访问远程端口。例如,如果你转发了一个监听在 3000 端口的 HTTP 服务器,通知可能会告诉你它被映射到本地主机的 4123 端口,因为 3000 已经被使用了。然后你可以使用http://localhost:4123,连接到这个远程 HTTP 服务器。
如果你以后需要访问这些信息,同样的信息可以在远程资源管理器的转发端口部分找到。
如果你想让 VS Code 记住你转发的任何端口,请勾选 Remote: Restore Forwarded Ports (⌘,) 或者在 settings.json 中设置 “rereportForwardedPorts”: true。
改变隧道的本地端口
如果你想让隧道的本地端口与远程服务器的不同,你可以通过转发端口面板来改变这个端口。
右键点击你想修改的隧道,在上下文菜单中选择改变本地端口。
始终转发一个端口
如果你有一直想转发的端口,你可以在你用来记忆主机和高级设置的同一个 SSH 配置文件中使用 LocalForward 指令。
例如,如果你想转发 3000 和 27017 端口,你可以按以下方式更新该文件。
Host remote-linux-machine
User myuser
HostName remote-linux-machine.mydomain
LocalForward 127.0.0.1:3000 127.0.0.1:3000
LocalForward 127.0.0.1:27017 127.0.0.1:27017
在远程主机上打开一个终端
从 VS Code 打开远程主机上的终端很简单。一旦连接,你在 VS Code 中打开的任何终端窗口(终端 > 新终端)将自动运行在远程主机上,而不是本地。
你也可以在这个终端窗口中使用代码命令行来执行一些操作,如在远程主机上打开一个新的文件或文件夹。输入 code —help 可以看到命令行中的所有选项。
在 SSH 主机上进行调试
一旦你连接到远程主机,你就可以像在本地运行应用程序一样使用 VS Code 的调试器。例如,如果你在 launch.json 中选择一个启动配置并开始调试(F5),应用程序将在远程主机上启动,并将调试器附加到它上面。
关于在. vscode/launch.json 中配置 VS Code 的调试功能的细节,请参阅调试文档。
SSH 主机的特定设置
当你连接到 SSH 主机时,VS Code 的本地用户设置也会被重复使用。虽然这能使你的用户体验保持一致,但你可能想在你的本地机器和每个主机之间改变其中的一些设置。幸运的是,一旦你连接到一个主机,你也可以通过运行 “偏好” 来设置主机的特定设置。打开远程设置命令(F1,⇧ ⌘P)或者在设置编辑器中选择远程标签。当你连接到主机时,这些设置将覆盖你的任何用户设置。而工作区的设置将覆盖远程和用户的设置。
远程 - SSH 扩展不提供直接支持同步源代码或使用本地工具与远程主机上的内容。然而,有两种方法可以使用常见的工具来做到这一点,这些工具可以在大多数 Linux 主机上工作。具体来说,你可以。
- 使用 SSHFS 挂载远程文件系统。
- 使用 rsync 将文件同步到 / 从远程主机到你的本地机器。
SSHFS 是最方便的选择,不需要任何文件同步。然而,性能会比通过 VS Code 工作的速度要慢得多,所以它最好用于单个文件的编辑和上传 / 下载内容。如果你需要使用一次批量读 / 写许多文件的应用程序(如本地源码控制工具),rsync 是一个更好的选择。
已知的限制
远程 - SSH 限制
- 强烈建议使用基于密钥的认证。为其他认证方法输入的密码和其他令牌不会被保存。
- 不支持 Alpine Linux 和非 glibc 的 Linux SSH 主机。
- 旧的(社区支持的)Linux 发行版需要变通方法来安装所需的先决条件。
- PuTTY 在 Windows 上不被支持。
- 如果你使用 SSH 克隆一个 Git 仓库,而你的 SSH 密钥有一个密码,VS Code 的拉动和同步功能在远程运行时可能会挂起。可以使用没有口令的 SSH 密钥,使用 HTTPS 克隆,或者从命令行运行 git push 来解决这个问题。
- 正在翻译,请稍候……
- 正在翻译,请稍候……
- 正在翻译,请稍候……
10/7/2021
https://code.visualstudio.com/docs/remote/ssh#_getting-started