简介

在 VSCode 有了 Remote SSH 之前,大多数 Linux 服务器开发者通常用 VS 远程,或者用 XShell 配合 Vim,或者在本地开发编辑好代码 XFtp 上传,或者用 Samba 等文件共享进行远程开发。虽然 VS 很强大,可是实际使用的时候,打开 VS 的时间和启动调试的时间一直是开发者埋怨的地方。

零、环境需求

  • x86_64 Debian 8+, Ubuntu 16.04+, CenOS / REL 7+
  • ARMv7l (AArch32) Raspbian Stretch/9+ (32-bit)
  • ARMv8l (AArch64) Ubuntu 18.04+ (64-bit)
  • Window 10 / Server 2016/2019 (1803+) using the official OpenSSH Server
  • macOS 10.14+ (Mojave) SSH host with Remote Login enabled

说白了就是让远程端支持 SSH Server,没有的话用以下指令安装:

一、前期准备

其实 Remote Development 开发插件里头就包含了 Remote-WSLRemote-ContainersRemote-SSH 三种远程开发功能。

  1. 安装、打开 VSCode 编辑器,左边竖列的扩展(expand),或者用 Ctrl + Shift + x,搜索 “Remote Development” 和 “Remote SSH” 插件并安装
  2. 然后重新启动 VSCode,因为用了中文语言包的话,安装后是不会显示的,需要重启才能生效

二、配置 SSH 用户以及 IP(Windows to Linux 为例)

安装完后,左侧那个竖列工具栏会出现 Remote SSH 的图标(一个显示器什么的),在 左侧弹出栏 里是空白的(没有 CONNECTIONS)的字眼,在配置完毕之后才会有这样的字眼。

Remote-SSH 配置步骤:

  1. 现在在左侧栏里的 SSH TARGETS 是没有东西的,首先使用快捷键 Ctrl + Shift + P 或 F1 打开活动栏(有东西说明有 config,跳到步骤 3 )。
  2. 输入 Remote-SSH: Open Configuration File,选择 C:\Users\Administrator\.ssh\config,这时候会进入编辑文件界面,写好信息重新载入即可。
  3. 顺利的话,在左侧栏 SSH TARGETS 就会出现图标了,这时候的小显示器是没有绿勾勾的,这时候右键需要连接的 Host,选择 Connect to Host to Current Window:当前窗口连接 Host,然后敲入远程端用户的访问密码即可,成功连接后可以在左下角看到 SSH: futuremedia-Precision-3630-Tower 的字样。
  4. 成功连接后,这时候在资源管理器(Ctrl + Shift + E)中也是空的,因为你仅仅是连接上了,默认访问的当前路径为 /home/futuremedia/,就和普通 SSH 使用一样。这时候需要点击打开文件夹添加工作空间。点击后会自动弹出 Linux 远程端当前地址的目录列表,选择需要访问的空间(这里选择了/home/futuremedia/PythonSpace/ 为工作空间,下面会用到),之后就可以访问该目录进行远程开发了。

PS 1. 如果需要同时管理多个 Host,可以在 C:\Users\Administrator\.ssh\config 中 每间隔一个回车 继续添加三元素(Host HostName User)即可,如:

PS 2. 如果想要关闭远程开发连接,点击左下角的 “><” ,然后点击关闭远程连接即可,同样的,点击在这里也可以弹出 Host 列表快速连接

PS 3. 在各种选择加载远程信息时,会要求多次的密码验证操作,这时候建议使用 ssh-keygen,在 C:\Users\Administrator\.ssh\config 中的如果有 id_rsa、 id_rsa.pub 这些文件就是因为设置了 keygen。如何生成密钥文件?

  1. 在 Windows 系统(客户端)中使用 PowerShell 进入 C:\Users\Administrator\.ssh\ 这个文件夹,运行 ssh-keygen 命令生成密钥文件(ssh-keygen 是基于 OpenSSH Client 的,windows 10 系统是自带)
  2. 这时候这个文件夹里,会生成了两个文件:id_rsaid_rsa.pub(文件名称不定,可以自行命名,这里是默认),将生成的 id_rsa.pub 里的内容复制到远程端主机的 ~/.ssh/authorized_keys 文件中,远程端目标目录 ~/.ssh/ 里没有这个文件就创建一个
  3. 这时候再进行远程连接就会提示 ‘Enter passphrase for key ‘C:\Users\Administrator/.ssh/id_rsa’: 输入在创建的时候设置的私钥口
  4. 如果在第二步生产私钥的时候,没有设置 passphrase 就可以直接访问,这样就可以 配置无密码的远程访问,这也可以结合 git 来使用,如

三、运行与调试

<步骤一:终端进行运行>

其实,这时候也有一种方式进行运行,就如平时使用 XShell 那样,用 Terminal 用命令行运行文件。在登录的时候,下方显示栏 终端 会打印登录信息(输入 passphase 的地方),右侧有个下选栏是使用 Channel 2: install,这时候我们选择为 Channel 1: bash 就会显示为我们熟悉的 Bash 界面,这里能像 Xshell 那样使用命令行运行程序。

但我们还不能一键 F5 进行直接运行。按 F5 会弹出选择调试环境,没有在服务端安装插件是没有对应的选项的,但我们可以选择 Edge: Launch 去生成运行环境配置。它会在当前的工作空间(这里是在远程端的 /home/futuremedia/PythonSpace/)里,创建 .vscode 目录,并新建 launch.json 远程调试配置文件,默认内容如下:

如果有安装了 Python 调试插件,在这里就可以选择服务端有的环境了。因为还没有安装,所以不能用 F5 实现一键运行

<步骤二:安装 Python 环境,自动生成环境配置文件 settings.json>

注意:

1、这时候左下角只有 “>< SSH:…” 的字样,没有环境。如果载入了环境,该字样后面会跟着一个环境的信息①

2、/home/futuremedia/.vscode-server/extensions/ 是使用 VSCode 登录时生成的,但里面没有 Python 扩展插件。如果安装了,就会有按钮可以选择

3、如果没有执行上面的<方法一…>,这里还是没有 .vscode 文件夹

首先配置好调试的所有插件,每种语言不一样。以 Python 为例子,在登录好远程端的状态下,Ctrl + Shift + X 查找 Python,这时候和在本机正常用 VSCode 的安装按钮不一样, 变成了 在 SSH: futurmedia-Precision-3630-Tower 中安装,选择,安装好后,这时候远程端会:

  • 在远程端 /home/futuremedia/.vscode-server/extensions/ 添加 Python 的远程调试扩展:ms-python.python-2020.7.96456(一个扩展,我觉得本质是 Interface)
  • 另外安装 C/C++ 扩展插件,会在上述的地址安装了 C/C++ 远程调试扩展:ms-vscode.cpptools-0.29.0

(如果有显示 需要重新载入 ,则进行点击它,安装->加载,这样这个插件才能生效)

如果服务端有 Python 的环境,可能会自动载入,在 ① 会显示,这里自动载入了 ~/anaconda3/bin/python 了(Python 3.7.4 64-bit (‘base’:conda) 字样)。点击 F5 调试,在 Select a debug  configuration 中选择 Python File,就会自动在控制台终端处创建一个会话并自动载入 anaconda 的环境(就是自动连接并执行 conda activate base 之类的命令)。

 

问题:这时候的环境会默认导入 futuremedia 这个用户的环境下的 Anaconda,如果我想使用或者每次连接的时候自动导入 系统自带的 Python 环境怎么办?

答:使用 settings.json 环境配置文件。

/home/futuremedia/PythonSpace/ 自动生成 .vscode/settings.json 文件(或者自己手动编辑),内容如下:

说明:这表示我这里配置的运行环境是在远程端自己配置的 Anaconda 虚拟环境下的 Python。

将之改变为系统的 Python 路径:

这样 VSCode 进行连接的时候就会载入这个文件里的路径了。

PS 1. 同样 C/C++ 的环境设置也是在一个文件里完成。

PS 2. 注意权限

到这里为止,可以算能用 F5 运行和调试了,但是还是不够,还不是一键!因为每次执行 F5,都需要进行各种选择。到这里还是和方法一差不多,多了个自动识别服务端环境并帮你载入的功能。

<步骤三:文件运行配置文件 launch.json>

点击下方的 调试按钮 并选择添加配置,在弹出的选择栏中选择 Debug Python,将会自动生成 .vscode/launch.json 文件,内容如下:

这时候在编辑各种文件的运行方式,这里设置的是:python 文件的时候直接按 F5 就可以一键运行和调试了。

<总结>

这里只要注意好几个关键的地方:

  • 区分 用户根路径 /home/futuremedia/ 和 工作区路径 /home/futurmedia/PythonSpace/
  • 插件相关文件在 用户根路径下:~/.vscode-server/
  • 运行环境配置文件 settings.json文件运行文件 launch.json 都放在 工作区路径 下的 .vscode 目录 下,并在该工作区生效