开门见山
我们的目的便是通过Visual Studio Code,以下简称vscode
,这个著名且免费的IDE来进行远程开发。本篇特指通过SSH连接远程服务器进行开发这一类需求,并且实现近乎本地开发的体验。特别是针对Jupyter Notebook的体验,配合vscode的notebook插件,效果是真的很好。
为了行文方便,在文中我将对以下名称的叫法进行统一:
- Visual Studio Code这个软件 » » » vscode
- 你的远程服务器,通常是Linux系统 » » » 远程服务器
- 你的本地主机,可能是Windows系统、macOS系统或者Linux系统 » » » 宿主机
- Remote-SSH这个vscode的插件 » » » remote插件
- Jupyter Notebook这个工具 » » » notebook
- vscode的扩展或者插件功能,英文名extension » » » 插件
vscode能获得如此成功,在我看来,很大一部分要归功于其开源的伟大以及丰富且活跃开发的插件(扩展)市场。进行远程开发,也是由Remote-SSH
这个插件实现的,以下简称为remote插件。
远程开发其实远不止通过SSH连接远程服务器,还包含了:
- Windows宿主机连接本地的WSL(Windows Subsystem for Linux)子系统。
- 连接本地的Docker镜像。
- 连接GitHub的代码空间(Codespaces)。
所以进行远程开发的第一步,就是下载vscode并且安装remote插件,安装后在左下角会出现一个远程连接的快捷图标。
配置服务器信息
点击左下角的快捷图标后,针对远程开发的不同对象选择对应选项,我们这里选择连接到主机。接下来便是填写具体的远程服务器信息,提供两种方式进行参考。
方法一:ssh命令
可以直接在输入框中输入完整的ssh
命令即可成功进行配置。注意username
替换为自己的用户名,host
替换为远程服务器的IP地址或者域名,port
替换为远程服务器的端口。需要跳板机的情况下,-J
后输入的同样是在跳板机上面的用户名、跳板机Host以及跳板机端口。
|
|
方法二:config文件
通过输入ssh命令成功连接到服务器后,vscode会自动将远程服务器相关配置信息保存到config配置文件中,所以理所当然的可以直接编辑config文件达到与命令一致的效果。点击连接到主机 -> 配置SSH主机后,通常选择自己用户目录下的.ssh/config
文件,如图就是yuesir
用户。
同样的,针对是否需要跳板机,给出两种配置文件格式,特别注意,这里的Host
是服务器的名称,这只是一个昵称,方便用户快速辨认,可以随意指定,中英文均可。注意区别ssh命令中host的含义,配置文件中HostName才是与命令中host一致的含义。
|
|
异常情况
这里需要多提醒一下,在连接过程中可能会遇到一直卡在正在下载 VS Code 服务器
这个状态,原因就是远程服务器不能正常连接到vscode-server
的地址,可能是由于服务器本身不通网,也可能是下载地址被墙不能直接访问。可以通过在本地宿主机手动下载后上传到服务器的方式解决这个问题,这里给出几篇文章以供参考。
配置免密登录
单独将这一小节拿出来介绍,主要是因为手动输入密码实在是太!麻!烦!啦!!!
这对于懒人来说实在是折磨,更别说还存在某些远程服务器需要单独配置VPN进行访问的情况,这时如果VPN效果不太稳定,经常会出现断连需要重新输入密码的情况。好在SSH早就考虑过这个问题了,通过配置密钥登录,不仅方便还安全(对我来说主要是方便。。。
同时这也是vscode官网教程推荐的方式,原文如下:
We recommend using key-based authentication (if you use a username/password, you’ll be prompted to enter your credentials more than once by the extension).
检查宿主机密钥对
|
|
如果存在类似的文件则跳过下面的创建宿主机密钥对步骤。
这是插播一个知识点,之所以会存在多种(两种)可能的密钥文件,主要是由于加密算法的不同。更具体来说主要是RSA算法与Ed25519算法。
命令 ssh-keygen -t rsa -b 4096 ssh-keygen -t ed25519 密钥类型 RSA Ed25519 性能 较慢(但仍足够快) 更快 安全性 高 更高 兼容性 与旧系统兼容性更好 某些非常旧的系统可能不支持 其实就是安全性、性能与兼容性的取舍,默认使用
ssh-keygen -t ed25519
即可。
创建宿主机密钥对
Windows系统打开cmd(命令提示符)或者Windows PowerShell,macOS或者Linux直接打开终端(Terminal)即可。如图是Windows 10系统使用cmd进行操作的示意图。
存在两种方式:
|
|
系统会提示输入安全密码,但可以直接回车(Enter),相当于将密码留空。现在应该有一个id_ed25519.pub
或者id_rsa.pub
文件,其中就包含了公共密钥,还有一个对应的没有.pub
后缀的文件,那是你的私钥。特别提醒:.pub公钥可以公开,但是没有后缀的私钥不能公开给其他人。
添加公钥到远程服务器
如果你是购买的云服务器,那么通常可以在购买的页面或者机器信息页面填入或者上传你的公钥。图为官方教程的一个截图。
这是一种比较直观的配置方式,但有时候并不适用。我们的远程服务器可能就是一个IP加上用户名和密码,这时候可以使用命令行的方式或者手动编辑。
|
|
此时就可以关闭vscode并且尝试重新连接远程服务器,如果不需要手动输入密码即为成功。接下来的内容针对于特定编程语言与notebook工具,请选择性阅读。
Python
使用vscode在远程服务器进行开发,同样需要在远程服务器上安装对应的插件。在这一点的操作上与本地几乎无异,只是需要注意安装到远程服务器上而不是宿主机。vscode会主动提醒你安装必须的插件,这里仅稍作记录。
当然还是推荐搭配Conda进行环境管理,具体的介绍可以查看下面文章。
关于notebook与R或者Python的联动,请查阅下一章节Notebook。
Notebook
关于notebook配置的文章本博客写了比较多,整理如下。需要说明的是,一是下面文章撰写的时间比较早了,那时候还是notebook的6版本,现在都已经进入7大版本了。
对于没有了解过notebook的童鞋,可以查阅一下安装教程以及官方文档。
如果需要一个比较详细的操作教程,可以在评论区留言(尽量不鸽
R与Notebook
R语言并不是只能在RStudio或者RStudio Server中使用,配合Notebook,我觉得可视化更为方便。
Python与Notebook
这里还记录了一些常见的问题,但是现在使用vscode来操作notebook后,方便了很多,基本上已经不用看了。