必须用本地VSCode“帮助→关于”中显示的40位commit ID(如6c3e3dfa918054a21972e0b53830d1f11051134e)匹配下载;最稳方式是在同版本联网机器上运行“Developer: Download Built-in Extensions”,从~/.config/Code/Remote/dist/获取${COMMIT_ID}.tar.gz,再上传至服务器。

怎么拿到和本地VSCode完全匹配的vscode-server包
本地 VSCode 和远程服务器上的 vscode-server 必须 commit ID 完全一致,否则连接会直接失败,报错类似 Failed to fetch 或卡在 log.txt 检查。这个 commit ID 不是版本号,而是 40 位哈希值,比如 6c3e3dfa918054a21972e0b53830d1f11051134e,在本地 VSCode 的「帮助 → 关于」里第二行就能看到。
最稳的方式不是手拼 URL 下载,而是在一台能联网、且装了**完全相同 VSCode 版本**的机器上,用 VSCode 自身触发下载:
- 打开命令面板(
Ctrl+Shift+P),运行Developer: Download Built-in Extensions - 等待完成,它会把
vscode-server包缓存在本地:
Linux 路径是~/.config/Code/Remote/dist/,文件名就是${COMMIT_ID}.tar.gz - 把这个
.tar.gz文件拷到内网服务器——比手动拼 URL 下载更可靠,避免因 CDN 域名变更或路径调整导致 404
为什么必须同时准备 cli-alpine-x64 工具包
新版 VSCode(2024 年后)启用 ExecServer 模式后,远程连接不再只靠 vscode-server,还依赖一个独立的 CLI 工具来启动和管理服务进程。这个工具叫 vscode_cli_alpine_x64_cli.tar.gz,它和主服务包一样,也必须严格匹配 commit ID。
如果只部署了 server 包但漏掉 CLI 包,你会看到连接日志里反复出现:
[server] Failed to start server: ENOENT: no such file or directory, open '/home/user/.vscode-server/cli/servers/Stable-${COMMIT_ID}/server'
这是因为 CLI 启动脚本找不到 server 可执行体——它其实被解压到了错误位置。正确做法是:
- 解压
vscode_cli_alpine_x64_cli.tar.gz,得到code二进制文件 - 把它放到
~/.vscode-server/code-${COMMIT_ID}/(注意不是bin/目录) - 确保
~/.vscode-server/cli/servers/Stable-${COMMIT_ID}/server是个软链接,指向../../code-${COMMIT_ID}/code
服务器基础依赖不满足时怎么办
vscode-server 不是纯静态二进制,它底层依赖系统级 glibc 和可选的 node 运行时。离线环境常见两个硬性报错:
-
cannot execute binary file: Exec format error:服务器架构不匹配(比如给 ARM64 服务器塞了 x64 包) -
GLIBC_2.28 not found:服务器 glibc 版本太低(常见于 CentOS 7 / Ubuntu 18.04)
解决方法不是升级系统,而是提前确认:
- 用
uname -m和ldd --version查清服务器架构和 glibc 版本 - 下载对应平台的包:x86_64 用
server-linux-x64.tar.gz,ARM64 用server-linux-arm64.tar.gz - 若 glibc 确实太旧,可尝试从旧版 VSCode(如 1.7x 系列)获取兼容包,commit ID 对应的包仍可在微软归档 URL 中找到
别跳过权限和目录结构校验
即使所有文件都放对了位置,chmod 权限错误或路径少一级,也会让 VSCode 认为“服务未安装”,反复重试下载。关键路径必须严格符合:
-
~/.vscode-server/bin/${COMMIT_ID}/:里面要有bin/code-server和server.js -
~/.vscode-server/cli/servers/Stable-${COMMIT_ID}/server:必须是可执行文件或有效软链接 - 整个
~/.vscode-server/目录建议设为700,避免 SSH 登录用户与实际运行用户不一致时的读写冲突
最容易被忽略的是:VSCode Remote-SSH 默认会在每次连接时检查 ~/.vscode-server/bin/ 下是否存在以 commit ID 命名的子目录。如果目录名拼错、大小写不对、或多了一层嵌套,它就当没看见——连日志都不会报错,只会安静地重新走下载流程。


















