这篇文章整理使用VS Code远程连接服务器可能遇到的一些问题
使用VS Code远程的原理
我借用官网的一张图:
简单来说就是,在SSH的基础上,VS Code在远程侧起了一个server,来方便安装扩展,进行远程调试等。这个 server 默认会下载在 ~/.vscode-server/bin/{commit-id}/ 文件夹下。commit-id 就是 VS Code当前的版本,比如我的VS Code版本如下:
版本: 1.93.1
提交: 38c31bc77e0dd6ae88a4e9cc93428cc27a56ba40
日期: 2024-09-11T17:20:05.685Z
浏览器: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Code/1.93.1 Chrome/124.0.6367.243 Electron/30.4.0 Safari/537.36
commit-id 对应的就是 38c31bc77e0dd6ae88a4e9cc93428cc27a56ba40
,我们打开远程服务器的地址~/.vscode-server/bin/
,就能看到
total 4
drwxrwxr-x. 6 ubuntu ubuntu 4096 Jun 10 20:05 38c31bc77e0dd6ae88a4e9cc93428cc27a56ba40
问题排查
替换文件
我这篇文章就不介绍如何连接到远程了,只介绍问题的排查手段和解决办法。
首选方法是选择“输出”,切换到“Remote-SSH”,这里有log输出,可以直接查看问题。
比如这是我安装的其中一次报错:
[19:54:07.044] Terminating local server
[19:54:07.077] Resolver error: Error: 无法安装 VS Code 服务器
一般情况下,首次连接到远程时,需要在远程环境下载 code-server,如果远程无法联网,此时会从本地下载,并复制到远程。然而这种下载的操作有概率会失败,此时一种办法是在本地下载好,然后通过类似的办法将文件复制到远程服务器。下载的地址如下:
https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable
下载完的文件(以Linux为例)是一个tar.gz格式的压缩包:
vscode-server-linux-x64.tar.gz
将其解压,重命名目录为你的commit_id
,使用scp或者sftp上传到之前的 ~/.vscode-server/bin/
目录下即可。部分文件可能无法上传成功,这种情况就需要把压缩包直接上传,然后在远程环境上解压即可。
降低版本
对于某些扩展的问题,更换版本可能有效果。
Python
Python相关的扩展,常用的有如下
ms-python.python
ms-python.debugpy
ms-python.vscode-pylance
后两个依赖第一个,一个比较常见的bug是由于扩展加载顺序的问题,往往pylance
和debugpy
都激活了,python
扩展还没有。这种情况下可以重新连接远程,就能解决问题。
Remote-SSH
远程连接插件一直是一个不稳定的因素,微软在多个版本尝试加入各种新特性,然而对稳定性的破坏也很严重。
我现在的版本如下:
ms-vscode-remote.remote-ssh v0.107.1
如果你远程连接也出现了问题,不妨降低版本。在扩展页面选择“卸载”右面的小三角,选择“安装特定版本”即可。
需要同一个ip的多个端口
有时候你可能需要同时连接同一个ip的多个端口。使用默认的连接命令在config
里创建配置后,应该类似如下:
配置文件的地址可以通过点击左侧Remote,点击上方齿轮,然后选择本地的配置文件(比如我的位置在/home/user/.ssh/config
,因为我的宿主机也是Linux,Linux连接Linux,很神奇吧)
Host 1.1.1.1
HostName 1.1.1.1
User ubuntu
可以通过Port
指定端口号,对Host
进行修改以指定别名:
Host 1.1.1.1-22223
HostName 1.1.1.1
User ubuntu
Port 22223