> [!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 原生远程开发方式)

该方式通过 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` 文件夹。
> 
## 使用步骤
#### 步骤一: 进行远程连接
- 点击左下角的蓝色图标,或者在侧边栏 `Remote Explore` 中点击加号 `+` 来添加远程主机


- 将会弹出选择窗口,选择一种连接类型(例如 SSH 连接:Connect to Host,Remote-SSH)

- 对于已保存了的远程主机,可在**侧边栏**中直接**点击进行连接**。 <br>侧边栏显示的远程主机的信息保存在用户家目录的 `.ssh\config` 文件中,如下所示:

- 连接成功后,左下角将显示当前主机的信息

#### 步骤二:在当前 VSCode 窗口中打开远程服务器上的任意文件夹或文件
> 
> 
<br><br><br>
# 方式二
略
<br><br>
# 远程环境下的插件安装
在 VSCode 原生的远程开发方式(方式一)下,VSCode 的插件可能会安装在两个位置:
- 本地(通常是 UI 相关的,例如主题或 snippets 等插件)
- **远程客户端**(其它大多数功能性插件应当安装在远端,例如 `Python` 官方插件、`C/C++` 官方插件等)
这允许**开发者在本地机器上为远端主机上的指定 `workspace` 中安装所需插件。**
如下所示:
> 
_
%%
## 需要在远程环境侧安装的插件:
- 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)