我是 VS Code 的重度用户,特别是它的 remote-ssh 功能。这个功能使得开发人员可以很方便地访问远程服务器,只要一个性能很平庸的机器用于连接,真正做到了code anywhere。
这个功能的正常运行依赖于一个在远程服务器上运行的code-server,用户的任何操作都是通过与这个code-server交互去完成的。首次通过VS Code连接服务器需要在远程服务器上下载并安装这个程序。一般来说这个过程是全自动的,VS Code会自动替用户完成这一系列的工作。但国内的云服务商连接微软的资源会经常性的出现连接失败的原因(懂得都懂),所以有时候你需要在远处服务器上手动的下载和安装这个程序。
如果你发现 remote-ssh 连接失败了,并且原因是 code-server 下载失败,按照下面的操作,只需4步就可以手动安装 code-server,享受一个正常的开发人员应有的开发体验。假设,现在你有一个可以正常连接微软资源的机器A,并且你的远程机器R是Linux机器:
- 获取 code-server 的版本。这个 code-server 的版本是用 git commit id 表示的,必须和你本地 VS Code 的版本完全一致。可以在本地 VS Code 的菜单 Help → About(帮助 → 关于)里找到 Commit 这一项,也可以在 VS Code 的报错日志里面找到;
- 在机器A上,下载 code-server 安装包(如果远程服务器是 ARM 架构,把
server-linux-x64换成server-linux-arm64):
commit_id=<commit_id> wget -c "https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable" -O vscode-server-linux-x64.tar.gz --limit-rate=1024k
- 从机器A拷贝 code-server 安装包到远程服务器R:
scp vscode-server-linux-x64.tar.gz <user>@<R>:~/
- 在远程服务器R上解压缩安装包到
~/.vscode-server/bin/<commit_id>:
commit_id=<commit_id> mkdir -p ~/.vscode-server/bin/${commit_id} tar -xzf ~/vscode-server-linux-x64.tar.gz -C ~/.vscode-server/bin/${commit_id} --strip-components 1
安装包里面还包了一层
vscode-server-linux-x64 目录,--strip-components 1 就是把这一层去掉,让解压出来的文件直接放在 <commit_id> 目录下。然后重新用 VS Code 连接远程服务器,它发现 code-server 已经装好了,就不会再去下载了。
新版本的 VS Code 怎么办?
较新版本的 Remote-SSH 换了一种安装方式:先在远程服务器上运行一个 VS Code CLI,再由它把 code-server 装到
~/.vscode-server/cli/servers/Stable-<commit_id>/server 目录下。如果你发现按上面的步骤装好之后,VS Code 还是在重新下载,大概就是这个原因。手动往新目录里放文件也不太可靠,网上有不少人反映还是会被重新下载。好在新版本的 Remote-SSH 也提供了一个更省事的办法:让本地的 VS Code 去下载 code-server,再通过 SSH 传到远程服务器上。默认情况下,只有在远程服务器自己下载失败之后才会走这条路。如果你确定远程服务器连不上,可以在本地 VS Code 的
settings.json 里直接指定总是在本地下载:"remote.SSH.localServerDownload": "always"
这样只要你本地的机器能正常访问微软的资源,远程服务器就完全不需要连外网了,也就用不上上面的手动安装。如果本地也连不上,那就只能回到机器A的办法,把安装包先下载下来了。
