在我们日常工作中,经常性的需要通过SSH的协议,远程连接服务器进行算法的开发测试等活动。 目前绝大多数关于远程开发的文档,包括公司内部,网上的资料等都主要还是面向开发以及测试方向的工作编写的。 而预研方向的工作与开发或者测试的工作有显著的区别,导致一定程度上上诉的资料并不适用预研的场景。
- 开发和测试方向工作主要重在远程服务器上部署运行相关程序;而预研工作则是主要重在利用远程服务器的硬件资源加速、并行化、和多进程的能力
- 开发和测试方向工作侧重于环境的配置和兼容性;而预研工作则不太需要关注这些
- 开发和测试方向工作的指标是程序的成功运行,所以一般的编程语言的log反馈就能满足其需求;而预研工作的指标是算法的性能指标,一般的log可能无法满足其全部需求,需要debug等工具来辅助
目前SSH远程开发的工具的使用流行度如下图,由vs code studio占据了一半以上的份额,并且经我使用,发现其确实优于其他几个选项,所以接下来我将详细介绍其功能和使用方法。
-
对比传统的SSH shell工具 + 文本编辑器
- 如Putty或者Xshell的软件远程SSH shell只能返回Terminal界面,无法满足现在复杂的开发需求
- vim等基础的文本编辑器,只能提供基本的编辑能力,没有代码纠错和自动补全等功能
- VS Code Remote SSH统一了分离的SSH远程工具和开发所需的IDE
-
对比Python开发常用的Pycharm
- Pycharm等IDE虽然也具备远程功能,但是在能本机编辑,实时上传调试;而VS Code Remote SSH可以直接在远程主机上编辑调试
- Pycharm远程功能是需要付费的;而VS Code Remote SSH是免费开源的软件
- Pycharm软件本体较大,加载速度较慢;而VS Code Remote SSH本体小巧,不吃本机配置,运行速度快
Visual Studio Code Remote - SSH 是一款基于VS Code的插件允许你在任何远程机器、虚拟机或容器上打开一个远程文件夹,并充分利用 VS Code IDE的功能。连接到远程服务器,你就可以与远程文件系统上任何位置的文件和文件夹进行交互。因为插件直接在远程机器上运行命令和其他扩展,因此无需在本地机器上放置源代码,也不吃本机的配置性能(适合我们无盘机远程服务器开发的特性)。 使用VS Code远程开发可以提供类似于本地质量的开发体验,包括IDE界面、代码导航、调试和Debug。
本机:需要安装兼容OpenSSH的SSH客户端
远程SSH主机:
- x86_64 Debian 8+, Ubuntu 16.04+, CentOS / RHEL 7+
- ARMv7l (AArch32) Raspberry Pi OS Stretch/9+ (32-bit)
- ARMv8l (AArch64) Ubuntu 18.04+ (64-bit)
- Windows 10 / Server 2016/2019 (1803+) 需要 OpenSSH
- macOS 10.14+ (Mojave) SSH 主机需要 Remote Login enabled.
- 远程主机需要至少1GB内存, 但是双核CPU推荐至少2GB内存以上
其他基于glibc
x86_//64、ARMv7l (AArch32) 和 ARMv8l (AArch64) 的 Linux 发行版如果具有所需的先决条件,应该也可以运行。
虽然 ARMv7l (AArch32) 和 ARMv8l (AArch64) 支持可用,但由于在扩展中使用 x86 本机代码,安装在这些设备上的某些扩展可能无法正常工作。
-
如果尚未安装兼容 OpenSSH 的 SSH 客户端,请安装该客户端。
-
安装 远程开发扩展包。
-
如果你还没有设置 SSH 主机,请按照 Linux, Windows 10 / Server (1803+), 和 macOS SSH 主机的说明进行操作。
-
可选 如果您的 Linux 或 macOS SSH 主机将被多个用户同时访问,请考虑在 VS Code用户设置中启用 Remote.SSH: Remote Server Listen On Socket 中的 User settings 以提高安全性。
在设置编辑器中:
要首次连接到远程主机,请执行以下步骤:
-
通过从Terminal/PowerShell 窗口中运行以下命令来验证您是否可以连接到 SSH 主机,并根据需要进行替换
user@hostname
。ssh user@hostname # Or for Windows when using a domain / AAD account ssh user@domain@hostname
-
在 VS Code 中,从命令面板(F1、Ctrl+Shift+P )中选择Remote-SSH: Connect to Host... 并使用与步骤 1 相同的方法
user@hostname
。 -
如果 VS Code 无法自动检测到正在连接的服务器类型,则会要求手动选择。
选择平台后,它将存储在 VS Code settings 中的
remote.SSH.remotePlatform
并可以随时更改它。 -
之后 VS Code 将连接到 SSH 服务器并自行设置。VS Code 将使用进度通知最新状态,可以在
Remote - SSH
输出通道中看到详细的日志。连接挂起或失败?有关解决常见问题的信息,请参阅 故障排除提示
如果看到有关 SSH 文件权限的错误,请参阅 修复 SSH 文件权限错误
-
连接上后,将处于一个空白的窗口中。你可以参考状态栏来查看您连接到的主机。
单击状态栏项目将在您连接时提供远程命令列表。
-
然后,可以像在本地一样使用 File > Open... 或者 File > Open Workspace... 打开远程计算机上的任何文件夹或工作区。
从这里,你可以在远程主机时使用的任何扩展包并开始编辑。
注意 在 ARMv7l / ARMv8l glibc
SSH 主机上,某些扩展包可能无法工作,因为扩展包中包含 x86 编译的本机代码。
如果使用的是 Linux 或 macOS SSH 主机,则可以一起使用 Remote - SSH 和 Remote - Containers 扩展包在 Docker 内的远程主机上打开文件夹。你甚至不需要在本地安装 Docker 客户端。
- 按照远程主机上的 Remote - Containers 扩展包的安装步骤进行操作。
- 为服务器设置 SSH 密钥的身份验证,无需多次输入密码。
- 按照 Remote - SSH 扩展连接到主机并在那里打开一个文件夹。
- 使用命令面板中的 Remote-Containers: Reopen in Container 命令 (
kbstyle(F1)
,kb(workbench.action.showCommands)
).
要在完成远程主机上的文件编辑后关闭连接,请选择 File > Close Remote Connection 以断开与主机的连接。默认配置不包括此命令的键盘快捷键。你也可以简单地退出 VS Code 来关闭远程连接。
如果你有一组经常使用的主机,或者需要使用一些附加选项连接到主机,为了简化设置,扩展程序可以帮助你添加主机,而无需手动编辑此文件。
系统会要求你选择要使用的配置文件。如果你想使用与列出的配置文件不同的配置文件,还可以在用户文件中设置"remote.SSH.configFile"
中的settings.json
。
例如 ssh -i ~/.ssh/id_rsa-remote-ssh [email protected]
在输入框中输入将生成以下条目:
Host remotehost.yourcompany.com
User yourname
HostName another-host-fqdn-or-ip-goes-here
IdentityFile ~/.ssh/id_rsa-remote-ssh
从现在开始,当你从命令面板(kbstyle(F1)
, kb(workbench.action.showCommands)
)或 Remote Explorer 中的 SSH Targets 选择Remote-SSH: Connect to Host...时,主机将出现在主机列表中。
Remote Explorer 允许你在远程主机上打开一个新的空窗口或直接打开你之前打开的文件夹。展开主机并单击要在主机上打开的文件夹旁边的 Open Folder 图标。
VS Code 在以下两个位置之一运行扩展:本地在 UI / 客户端,或远程在 SSH 主机上。虽然影响 VS Code UI 的扩展包(如主题和代码片段)安装在本地,但大多数扩展将驻留在 SSH 主机上。这可确保你获得流畅的体验,并允许你从本地计算机上为 SSH 主机上的给定工作区安装任何需要的扩展包。这样,你可以从另一台带有扩展程序的机器上准确地从上次中断的地方继续。
如果你从Extensions
视图安装扩展包,它将自动安装在正确的位置。安装后,你可以根据类别分组判断扩展包的安装位置。
您的远程 SSH 主机将有一个类别:
还有一个 Local - Installed 类别:
实际需要远程运行的本地扩展包将在 Local - Installed 类别中显示为灰色和禁用。选择 Install 以在远程主机上安装扩展包。
如果你希望在任何 SSH 主机上始终安装一些扩展,可以使用 remote.SSH.defaultExtensions
property in settings.json
。 例如,如果想安装 GitLens 和 Resource Monitor 扩展包, 请指定它们的扩展包 ID,如下所示:
"remote.SSH.defaultExtensions": [
"eamodio.gitlens",
"mutantdino.resourcemonitor"
]
有时在开发时,你可能需要访问远程机器上的其他端口。有两种方法可以使用 SSH tunnel 将所需的远程端口转发到本机。
连接到主机后,如果你想在会话期间 temporarily forward 到新端口,请从命令面板(kbstyle(F1)
, kb(workbench.action.showCommands)
) 中选择 Forward a Port 或单击中的转发新端口图标从活动栏中选择 Remote Explorer。
系统会要求输入要转发的端口,你可以为其命名。
如果你有固定的转发的端口, 你可以用 LocalForward
中的 remember hosts and advanced settings 的同一个 SSH 配置文件中使用该指令。
例如,如果你想转发端口 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
- 官方文档 Tips and Tricks 和 FAQ.
- 联系我:
万骏泓
研究院\大数据智能部\大数据算法部\知识挖掘组- 内网邮箱 [email protected]
- 外网邮箱 [email protected]