最近用VSCode远程连接服务器写代码时,突然就连不上了。点击连接后,进度条卡半天,最后弹出个模糊的错误提示,试了好几次都这样。作为每天都要靠远程开发干活的人,这可太影响效率了。琢磨了大半天总算搞定,把过程记下来,万一你也遇到类似问题,或许能少走点弯路。
一、先说说遇到的问题
具体症状就是:VSCode里点"远程连接",输入密码后没反应,过一会儿提示"连接超时";有时候又会显示"正在安装VSCode Server",但进度一直不动,最后直接断开。
一开始以为是网络问题,试了ping服务器,能通;用终端直接ssh连接,输密码能登上。这说明服务器和网络都没问题,问题大概率出在VSCode本身。
二、第一次尝试:删服务器的配置文件
网上资料说VSCode远程连接靠的是服务器上的.vscode-server
文件夹,里面存着匹配的服务端程序。说不定是这个文件夹出了问题,那就试试删掉重来吧。
步骤很简单:
- 用终端ssh登录服务器(这时候还能登上)
- 执行删除命令:
bash
rm -rf ~/.vscode-server
- 关掉VSCode重新连接
本以为这样就能让VSCode重新自动安装服务端,结果还是不行。连接时依旧卡在安装步骤,看来问题没这么简单。
三、第二次尝试:手动安装匹配的服务端
既然自动安装失败,那就手动来。后来才知道,VSCode客户端和服务端必须版本匹配,不然就会连接失败。这里的"版本"不是指1.103.0这种数字,而是一个叫"commit id"的哈希值(一串字母加数字的代码)。
具体操作分三步:
1. 找到本地VSCode的commit id
打开本地VSCode,按Ctrl+Shift+P
调出命令面板,输入"Help: 关于"(或者英文"About"),会弹出一个窗口,里面有一行类似"版本: 1.103.0 (7f329fe6c66b0f86ae15753d2fb3a363b9c84a9)"的内容,括号里的那串字符就是我们要的commit id。


2. 登录服务器手动操作
用终端ssh登录服务器后,依次执行下面的命令(注意把命令里的你的commit id
换成刚才找到的那串字符):
bash
# 先确保旧的文件被删干净
rm -rf ~/.vscode-server
# 创建存放服务端程序的文件夹
mkdir -p ~/.vscode-server/bin/你的commit id
# 下载对应版本的服务端压缩包
wget https://update.code.visualstudio.com/commit:你的commit id/server-linux-x64/stable -O vscode-server.tar.gz
# 解压到刚才创建的文件夹
tar -zxf vscode-server.tar.gz -C ~/.vscode-server/bin/你的commit id --strip-components 1
执行完这些,关掉终端,重新用VSCode连接,本以为这次能成,结果又卡住了------原来服务器网络有限制,wget
命令根本下载不了压缩包。
四、终极解决:本地下载后上传服务器
既然服务器下不了,那就换个思路:在本地电脑下载好压缩包,再传到服务器上。
1. 本地下载服务端压缩包
在本地浏览器里输入链接:https://update.code.visualstudio.com/commit:你的commit id/server-linux-x64/stable
(同样把你的commit id
换成实际的哈希值),浏览器会自动下载一个压缩包(可能叫stable
,可以重命名为vscode-server.tar.gz
方便操作)。
2. 把压缩包传到服务器
用scp
命令上传(在本地终端执行,把你的用户名
、服务器IP
和本地文件路径
换成实际信息):
ruby
scp /本地文件路径/vscode-server.tar.gz 你的用户名@服务器IP:~/
这时候会提示输入服务器密码,输完后等待上传完成。
3. 服务器上完成安装
再次用ssh登录服务器,执行下面的命令(还是要替换你的commit id
):
bash
# 确保文件夹已创建
mkdir -p ~/.vscode-server/bin/你的commit id
# 把上传的压缩包解压到目标文件夹
tar -zxf ~/vscode-server.tar.gz -C ~/.vscode-server/bin/你的commit id --strip-components 1
五、终于搞定了
做完这一切,重新打开VSCode,点击远程连接,这次没再卡壳,几秒钟就连接成功了。看来问题的根源就是VSCode客户端和服务端版本不匹配,加上服务器网络限制导致自动安装失败,手动匹配版本后就好了。
如果以后再遇到类似问题,应该会先检查版本是否匹配,再一步步排查网络和文件权限的问题。希望这个过程能帮到同样遇到困扰的朋友。