> [!caution] > Ubuntu 发行版只内置安装了 `openssh-client`,而没有安装 `openssh-server`。 > 需要通过 `sudo apt install openssh-server` **安装 openssh 服务器**后才能 "**被远程连接**"。 # VSCode 远程开发相关插件 `Remote Development extention pack` **插件包**,其中包括以下五个插件(下面插件都可单独下载) | 插件 | 说明 | | ------------------ | ----------------------------------------------------------------------------------------------------------------------- | | `Remote - SSH` | 用 SSH 连接到远程服务器,访问远程服务器上的代码,并使用远程服务器环境来运行/调试 | | `Remote - Tunnels` | 使用 VSCode Tunnel 连接到远程服务器,访问远程服务器上的代码,并使用远程服务器环境来运行/调试。 | | `Dev Containers` | 访问挂载到容器的文件夹,使用单独的工具链或基于容器的应用程序。 <br> => 用于在本机上访问 Docker 容器内的代码并在容器内环境下进行运行/测试。 | | `WSL` | 访问 WSL 中的文件夹,用于访问存储在本机的 WSL 中的代码并使用 WSL 的环境进行运行/测试。 | | `Remote Explorer` | "Remote -SSH" 或 "Remote - Tunnels" 这两个插件提供了访问远程服务器的功能, <br>该插件则在 VSCode 中提供了一个**侧边栏"Remote Explore"**,用于直接显示远程服务器上的目录。 | <br><br> # VSCode 配置远程开发环境 VSCode 里实现远程开发(利用远程服务器的硬件及计算资源)有两种方式 [^1] [^VSCode_远程开发的两种方式]: - 方式一(VSCode 原生方式) **代码只在"远程服务器"**,通过 VSCode 直接访问远程服务器上的代码,在本地 VScode 中**直接使用远程服务器的环境来运行/调试其中的代码**。 - 优点:**本地机器不存储代码**,也无需将远程服务器上的代码同步到本地。 - 缺点: - **离线环境下就无法在本地开发,网络连接不稳定时也受影响。** - 如果要运行/调试代码,需要在远程服务器上安装 VSCode,并配置好完整的 VSCode 环境(例如 `task.json`、`launch.json` 等文件)。 - 方式二:**代码在 "本地",自动同步到"远程服务器"**。 <br>使用 VSCode 编辑本地的代码,再通过 SFTP 或插件自动同步到远程服务器(本地-远程之间自动同步),相当于一份代码保存在了两地。 - 优点:本地保存有代码,离线也可编辑 - 缺点:**代码无法直接在远程环境下运行(不能像 Pycharm 那样配置远程解释器)** # 方式一(VSCode 原生远程开发方式) ![image-20240103141940347|550](_attachment/05-工具/VSCode/VSCode%20配置远程开发环境.assets/IMG-VSCode%20配置远程开发环境-BDBACAFB5D42F9A5540E594C55F9EFA7.png) 该方式通过 VSCode 直接访问**远程服务器上的代码**,在本地 VScode 中**直接使用远程服务器的环境来运行/调试其中的代码**。[^2] 这种方式下,**本质上通过 SSH 或 VSCode Tunel 传输的只是 ==VSCode 的整个 UI 界面**==,所以: - **如果要通过本地 VSCode 来使用远程服务器的环境运行或调试代码的话,必须==在远程服务器安装有 VSCode 并配置完整的 VSCode 环境==(例如 `task.json`,`launch.json` 文件)**。 - **否则的话,本地 VSCode 的作用仅限于==访问/远程服务器上的目录和文件==,对文件内容进行编辑修改,而==不能运行文件**==。 该方式需要安装"**Remote Development extention pack**" 插件集,其中包括以下插件 ![[05-工具/VSCode/VSCode 通用插件说明及配置#远程开发相关|VSCode插件配置]] ## 工作原理 如下所示,本质上是在 **本地的 VSCode 窗口** 中**打开了一个 "远程主机" 下的目录**, 能够 **访问/编辑**这一目录下的文件内容,能够使用远程主机的命令行终端。 > [!example] 示例 > 在本地 VSCode 窗口中打开了远程主机 `locam_ubuntu` 中的 `/home/yht/Desktop` 文件夹。 > ![image-20240103153644614|639](_attachment/05-工具/VSCode/VSCode%20配置远程开发环境.assets/IMG-VSCode%20配置远程开发环境-3CF2D17E40FEED001CD342400F110D3D.png) ## 使用步骤 #### 步骤一: 进行远程连接 - 点击左下角的蓝色图标,或者在侧边栏 `Remote Explore` 中点击加号 `+` 来添加远程主机 ![image-20240103160650494|204](_attachment/05-工具/VSCode/VSCode%20配置远程开发环境.assets/IMG-VSCode%20配置远程开发环境-A858F3B8369F0D6D0EC4A3955C1B615B.png) ![image-20240103151403313|625](_attachment/05-工具/VSCode/VSCode%20配置远程开发环境.assets/IMG-VSCode%20配置远程开发环境-0DA594BFF74EBCEFD02CFB649F565C65.png) - 将会弹出选择窗口,选择一种连接类型(例如 SSH 连接:Connect to Host,Remote-SSH) ![image-20240103160718997|525](_attachment/05-工具/VSCode/VSCode%20配置远程开发环境.assets/IMG-VSCode%20配置远程开发环境-363B5FA69F35CDDA2DDAA5949B333C27.png) - 对于已保存了的远程主机,可在**侧边栏**中直接**点击进行连接**。 <br>侧边栏显示的远程主机的信息保存在用户家目录的 `.ssh\config` 文件中,如下所示: ![image-20240103161213865|273](_attachment/05-工具/VSCode/VSCode%20配置远程开发环境.assets/IMG-VSCode%20配置远程开发环境-00ED3FF0B656C5A4DE3D0FF8285085BF.png) - 连接成功后,左下角将显示当前主机的信息 ![image-20240103161456413|202](_attachment/05-工具/VSCode/VSCode%20配置远程开发环境.assets/IMG-VSCode%20配置远程开发环境-825CEAD1805742AB6D7B1DBC4CE9190D.png) #### 步骤二:在当前 VSCode 窗口中打开远程服务器上的任意文件夹或文件 > ![image-20240103161645633|316](_attachment/05-工具/VSCode/VSCode%20配置远程开发环境.assets/IMG-VSCode%20配置远程开发环境-52C7B92879DA9958EA7ABCE5FBD1509B.png) > ![image-20240103153558979|600](_attachment/05-工具/VSCode/VSCode%20配置远程开发环境.assets/IMG-VSCode%20配置远程开发环境-FE3B35AA5E1E06F18A46CAD8937FB463.png) <br><br><br> # 方式二 略 <br><br> # 远程环境下的插件安装 在 VSCode 原生的远程开发方式(方式一)下,VSCode 的插件可能会安装在两个位置: - 本地(通常是 UI 相关的,例如主题或 snippets 等插件) - **远程客户端**(其它大多数功能性插件应当安装在远端,例如 `Python` 官方插件、`C/C++` 官方插件等) 这允许**开发者在本地机器上为远端主机上的指定 `workspace` 中安装所需插件。** 如下所示: > ![image-20240103162929270|338](_attachment/05-工具/VSCode/VSCode%20配置远程开发环境.assets/IMG-VSCode%20配置远程开发环境-C7D00A632B0D2273D53C71DE5B4534CC.png) _ %% ## 需要在远程环境侧安装的插件: - C/C++官方套件 - `shell-check` - `clangd` - `Todo Tree` - `Github copilot` - `koroFileHeader` %% <br><br><br> # VSCode 远程 ssh 连接免密登录 vscode 没有保存 ssh 密码的功能。 因此实现 "免密登录" 的途径是**将 SSH 远程登录的身份认证方式由 "密码认证" 改为 "==密钥认证=="**:[^3] [^4] 方式参见 [[02-开发笔记/07-计算机网络/应用层/SSH 协议#配置 SSH 密钥认证|SSH 协议-配置SSH密钥认证]] - 1. 在本地电脑上**生成 ssh 密钥对——私钥&公钥**(例如`id_rsa` 与 `id_rsa.pub`,如果已存在则跳过此步) - 2. 将本机上的 **==公钥内容==**(例如`id_rsa.pub`)追加到**远程服务器上的 `~/.ssh/authorized_keys` 文件**中 (若 `~/.ssh`目录不存在则新建) - 3. 在本机的 `~/.ssh/config` 配置文件中为 "**指定服务器**" 的配置项增加 "**IdentityFile**" 字段,指定本机"**==私钥==文件路径**"。 ![[_attachment/05-工具/VSCode/VSCode 配置远程开发环境.assets/IMG-VSCode 配置远程开发环境-8BE3F058E7B667911D449D234B229998.png|575]] ![[_attachment/05-工具/VSCode/VSCode 配置远程开发环境.assets/IMG-VSCode 配置远程开发环境-47A4EFEDA78CE4B7828A08BFA7B0DC1C.png|325]] <br><br><br> # 参考资料 ## Footnotes [^1]: [VScode 实现本地与远端同步开发的两种方式]( https://mdnice.com/writing/f64fed1c60454ffaacaf1bdb8359624c ) [^2]: [Developing on Remote Machines using SSH and Visual Studio Code](https://code.visualstudio.com/docs/remote/ssh#_getting-started) [^3]: [vscode 远程ssh连接省去输入密码\_linux系统中vscode远程连接添加文件夹时取消密码-CSDN博客](https://blog.csdn.net/qq_37429313/article/details/116105403) [^4]: [VSCode Remote SSH 保存密码 自动登录 – 平平淡淡的博客](http://blog.cmtspace.cn/archives/109)