Visual Studio Code 自动更新后,会遇到连不上远程主机的问题,
现象
vscode 的 Remote - SSH 插件 用来直接编辑远程主机的文件,但是连接远程主机时,会出现连接超时的错误。
状态栏提示 Opening Remote
浮动框提示 Setting up SSH Host xxx: Copying VS Code Server to host with scp.
看浮动框的提示,似乎是要往远程主机(host)上拷贝 VS Code Server
VS Code Server
VS Code Server 是运行在远程主机上的 Node.js 服务,可以让开发人员从自己的桌面端通过 VS Code 编辑器连接到远程主机上,查看和编辑远程主机的文件系统,拥有编辑本地文件的体验。
VS Code 的 Remote - SSH 的插件简单拓扑如下:(与 Remote WSL 原理相同)
( ☝ VS Code Server )
VS Code Server 的版本必须和 VS Code 编辑器 的版本号保持一致。这里的版本号不是粗略的、类似 1.29 之类的写法,而是精确到 commit id 的。
VS Code 编辑器的 commit id 可以从“帮助”菜单上获取:
深入调查
查看 VS Code 编辑器的输出 log
[20:44:53.523] > Installing to /home/user/.vscode-server/bin/eaa41d57266683296de7d118f574d0c2652e1f
> c4...
> 08db8f41e054%%1%%
> Downloading with wget
[20:44:53.671] > wget download failed
> ERROR: cannot verify update.code.visualstudio.com's certificate, issued by ‘CN=M
> icrosoft Azure RSA TLS Issuing CA 08,O=Microsoft Corporation,C=US’: Self-signed
> certificate encountered. To connect to update.code.visualstudio.com insecurely,
> use `--no-check-certificate'.
...
[20:44:56.829] Using cwd: file:///c%3A/Users/lf/AppData/Local/Temp/vscode_server_1725281096661
[20:44:56.829] Terminal shell path: C:\Windows\System32\cmd.exe
[20:44:57.143] > C:\Windows\System32\cmd.exe
[20:44:57.164] > g:/home/user/.vscode-server/bin//eaa41d57266683296de7d118f574d0c2652e1fc4: No such
> file or directory
可以看到在远端主机上尝试用 wget 下载 server 程序,但是没有下载成功。按照预定的储存位置寻找,当然不会找到。所以一直卡在这里:
VS Code Server 的目录结构
远程主机上,VS Code Server 的存储目录结构如下:
${Home}
└─ .vscode-server
├─ data/
├─ extensions/
└─ bin
├─ eaa41d57266683296de7d118f574d0c2652e1fc4
├─ 118f574d0c2652e1fc4eaa41d57266683296de7d
└─ 2652e1fc4eaa41d57266118f574d0c683296de7d
其中 ${Home}/.vscode-server/bin/
目录下以 VS Code 编辑器 commit id 为名称的文件夹
解决问题
微软提供了另一个新的下载地址: https://vscode.download.prss.microsoft.com,在写本文的时候,是可以使用的。
下面脚本根据 阿亮@zhihu 上提供的脚本,更新了新的下载地址,亲测可用。
#!/bin/bash
echo "ps:目前只支持x64场景,arm场景请酌情修改脚本."
read -p "请输入你vscode的commit id : " commit
if [ ! -z "$commit" ]; then
test -d ${HOME}/.vscode-server/bin/$commit || mkdir -p ${HOME}/.vscode-server/bin/$commit
echo "通过国内加速站下载vscode文件"
mkdir -p ~/vscode-backup
wget --no-check-certificate https://vscode.download.prss.microsoft.com/dbazure/download/stable/$commit/vscode-server-linux-x64.tar.gz -O ~/vscode-backup/vscode-server-linux-x64.tar.gz
tar -zxvf ~/vscode-backup/vscode-server-linux-x64.tar.gz -C ~/vscode-backup
cp -rf ~/vscode-backup/vscode-server-linux-x64/* ${HOME}/.vscode-server/bin/$commit/
echo "vscode配置完毕"
rm -rf ~/vscode-backup/
echo "清理旧文件"
else
echo "请查看vscode的关于找到对应的版本commit id"
fi
运行效果如下:
关闭自动更新
如果不想每次自动更新后都手动执行一次脚本,那么可以关闭 VS Code 的自动更新。
打开 Setting, 搜索 update 关键字,按照图中红框里的选项配置即可。
如果您对本文有疑问或者寻求合作,欢迎 联系邮箱 。邮箱已到剪贴板
精彩评论
参考资料
本站 是个人网站,采用 署名协议 CC-BY-NC 授权。
欢迎转载,请保留原文链接 https://www.lfhacks.com/tech/vscode-server/ ,且不得用于商业用途。