【日常开发】 VSCode Remote SSH 在 Ubuntu 18.04 (GLIBC 2.27) 上的解决方案
2026/5/25 19:45:06 网站建设 项目流程

VSCode Remote SSH 在 Ubuntu 18.04 GLIBC 2.27上的解决方案

    • 背景
    • 解决思路
    • 第一步:检查编译依赖
    • 第二步:非 root 编译安装 GLIBC 2.28
    • 第三步:安装 patchelf
    • 第四步:准备 libstdc++ 和 libgcc
    • 第五步:patch VSCode node 二进制
    • 第六步:跳过 VSCode GLIBC 版本预检查
    • 第七步:持久化配置
    • 遇到的问题与解决
      • 问题 1:configure 报错 GLIBC cannot be compiled without optimization
      • 问题 2:make install 没有写入权限
      • 问题 3:patchelf 后 node 报错缺少 libstdc++
    • 问题 4:patchelf 后 node 报错缺少 libgcc_s
      • 问题 5:VSCode 连接直接报错不给 patch 机会
      • 问题 6:VSCode 反复下载覆盖 node
      • 问题 7:用 ld 运行静态链接的 CLI 导致 Segfault
    • 最终自动化脚本
    • 原理总结
    • 参考

背景

VSCode 1.121.0+ 要求远程服务器 GLIBC >= 2.28,而 Ubuntu 18.04 自带 GLIBC 2.27,导致无法连接。在AI 的加持了 方案验证通过,记录下遇到的问题。

系统环境:

  • OS: Ubuntu 18.04
  • GLIBC: 2.27
  • 用户: 非 root
  • VSCode: 1.121.0 (commit f6cfa2ea)

解决思路

问题:VSCode Server 需要 GLIBC 2.28,系统只有 2.27
方案:

  1. 非 root 用户本地编译安装 GLIBC 2.28
  2. 用 patchelf 修改 VSCode node 二进制的动态链接器路径
  3. 创建 /tmp/vscode-skip-server-requirements-check 跳过版本预检查

第一步:检查编译依赖

gcc --version make --version

第二步:非 root 编译安装 GLIBC 2.28

下载源码

cd /tmp wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz tar -xf glibc-2.28.tar.gz

编译安装到用户目录

mkdir /tmp/glibc-build cd /tmp/glibc-build /tmp/glibc-2.28/configure \ --prefix=/home/$USER/opt/glibc-2.28 \ --disable-werror make -j$(nproc) make install

验证安装

ls ~/opt/glibc-2.28/lib/ # 应该看到 libc.so.6, ld-linux-x86-64.so.2 等 ~/opt/glibc-2.28/lib/libc.so.6 --version # 应该输出 GNU C Library 2.28

第三步:安装 patchelf

# 下载预编译版本 mkdir -p /tmp/bin wget -O /tmp/bin/patchelf \ https://github.com/NixOS/patchelf/releases/download/0.18.0/patchelf-0.18.0-x86_64.tar.gz # 如果下载的是 tar.gz cd /tmp wget https://github.com/NixOS/patchelf/releases/download/0.18.0/patchelf-0.18.0-x86_64.tar.gz tar -xf patchelf-0.18.0-x86_64.tar.gz cp bin/patchelf /tmp/bin/patchelf chmod +x /tmp/bin/patchelf # 验证 patchelf --version

第四步:准备 libstdc++ 和 libgcc

VSCode node 还依赖 libstdc++ 和 libgcc_s,需要复制到 glibc-2.28/lib:

# 复制 libstdc++cp/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25~/opt/glibc-2.28/lib/ln-sf~/opt/glibc-2.28/lib/libstdc++.so.6.0.25\~/opt/glibc-2.28/lib/libstdc++.so.6# 复制 libgcc_s cp/lib/x86_64-linux-gnu/libgcc_s.so.1~/opt/glibc-2.28/lib/# 验证 ls-la~/opt/glibc-2.28/lib/|grep-E"stdc|gcc"

第五步:patch VSCode node 二进制

#VSCode 下载 server 后 patch nodeCOMMIT="f6cfa2ea2403534de03f069bdf160d06451ed282"NODE_PATH=~/.vscode-server/cli/servers/Stable-${COMMIT}/server/node patchelf \--set-rpath~/opt/glibc-2.28/lib \--set-interpreter~/opt/glibc-2.28/lib/ld-linux-x86-64.so.2\ ${NODE_PATH}# 验证 ${NODE_PATH}-v

第六步:跳过 VSCode GLIBC 版本预检查

VSCode CLI 在启动 server 前会检查系统 GLIBC 版本,通过创建特定文件跳过:

touch/tmp/vscode-skip-server-requirements-check

原理: 在 VSCode CLI 二进制的字符串中发现这个路径,说明官方预留了跳过检查的机制。

第七步:持久化配置

cat>>~/.bashrc<<'EOF'#VSCode Remote SSH GLIBC 修复touch/tmp/vscode-skip-server-requirements-check find~/.vscode-server/cli/servers/-name"node"|whileread f;dopatchelf \--set-rpath~/opt/glibc-2.28/lib \--set-interpreter~/opt/glibc-2.28/lib/ld-linux-x86-64.so.2\"$f"2>/dev/null doneEOF


遇到的问题与解决

问题 1:configure 报错 GLIBC cannot be compiled without optimization

原因: 在源码目录内执行了 configure
解决: 必须在单独的 build 目录执行

# 错误做法 cd/tmp/glibc-2.28./configure # ❌ # 正确做法 mkdir/tmp/glibc-build cd/tmp/glibc-build/tmp/glibc-2.28/configure # ✅

问题 2:make install 没有写入权限

原因:非 root 用户无法写入系统目录
解决:–prefix=/home/$USER/opt/glibc-2.28 安装到用户目录

/tmp/glibc-2.28/configure \--prefix=/home/$USER/opt/glibc-2.28\ # ✅ 用户目录--disable-werror

问题 3:patchelf 后 node 报错缺少 libstdc++

错误:error while loading shared libraries: libstdc++.so.6: No such file or directory
原因: patchelf 修改了 rpath 后只从 ~/opt/glibc-2.28/lib 加载库,但该目录没有 libstdc++

解决:

# 查找系统的 libstdc++ ls -la /usr/lib/x86_64-linux-gnu/libstdc++* # lrwxrwxrwx libstdc++.so.6 -> libstdc++.so.6.0.25 # -rw-r--r-- libstdc++.so.6.0.25 # 复制实体文件 + 创建符号链接 cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25 ~/opt/glibc-2.28/lib/ ln -sf ~/opt/glibc-2.28/lib/libstdc++.so.6.0.25 \ ~/opt/glibc-2.28/lib/libstdc++.so.6

问题 4:patchelf 后 node 报错缺少 libgcc_s

错误:error while loading shared libraries: libgcc_s.so.1: No such file or directory
解决:cp /lib/x86_64-linux-gnu/libgcc_s.so.1 ~/opt/glibc-2.28/lib/

问题 5:VSCode 连接直接报错不给 patch 机会

error This machine does not meet prerequisites-find GLIBC>=v2.28.0(but found v2.27.0instead)exitCode==207==

原因: VSCode CLI 在启动 server 前做了 GLIBC 版本预检查,直接拒绝,node 根本没有被执行

解决: 通过分析 CLI 二进制字符串找到官方跳过机制

# 分析 CLI 二进制,发现关键字符串 strings~/.vscode-server/code-f6cfa2ea...|grep-i"skip"# 输出:/tmp/vscode-skip-server-requirements-check # 创建该文件即可跳过检查 touch/tmp/vscode-skip-server-requirements-check

问题 6:VSCode 反复下载覆盖 node

原因: node 启动失败后,VSCode 认为安装损坏,删除 servers 目录重新下载,形成死循环

解决: 两步并行

先创建 skip 文件让 VSCode 跳过预检查
下载完成后立即 patch node

# 监控脚本(另开终端)whiletrue;dofind~/.vscode-server/cli/servers/-name"node"|whileread f;dopatchelf \--set-rpath~/opt/glibc-2.28/lib \--set-interpreter~/opt/glibc-2.28/lib/ld-linux-x86-64.so.2\"$f"2>/dev/null&&echo"patched: $f"done sleep1done

问题 7:用 ld 运行静态链接的 CLI 导致 Segfault

# 错误尝试~/opt/glibc-2.28/lib/ld-linux-x86-64.so.2\~/.vscode-server/code-f6cfa2ea...# Segmentation fault

原因: VSCode CLI 是静态链接的,自带运行时,用外部 ld 加载会冲突

ldd~/.vscode-server/code-f6cfa2ea...#staticallylinked ← 静态链接,不需要 patch

最终自动化脚本

cat>~/fix-vscode.sh<<'EOF'#!/bin/bash#VSCode Remote SSH GLIBC 修复脚本# 适用于 Ubuntu18.04(GLIBC2.27)GLIBC_LIB=~/opt/glibc-2.28/lib #1.跳过 VSCode GLIBC 预检查 touch/tmp/vscode-skip-server-requirements-check echo"✓ 已创建 skip 文件"#2.patch 所有 VSCode server node find~/.vscode-server/cli/servers/-name"node"|whileread f;dopatchelf \--set-rpath $GLIBC_LIB \--set-interpreter $GLIBC_LIB/ld-linux-x86-64.so.2\"$f"2>/dev/null&&echo"✓ patched: $f"done echo"完成!"EOFchmod+x~/fix-vscode.sh # 加入.bashrc 开机自动执行 echo'bash ~/fix-vscode.sh'>>~/.bashrc

原理总结

VSCode 连接流程(修复后): Windows VSCode │ ▼ SSH 连接 远程服务器 │ ▼ 运行~/.vscode-server/code-xxx(静态链接,不受 GLIBC 限制) │ ▼ 检查/tmp/vscode-skip-server-requirements-check ← 文件存在,跳过检查 │ ▼ 下载并解压 vscode-server-linux-x64.tar.gz │ ▼ 运行 server/node(已被 patchelf 修改为使用~/opt/glibc-2.28) │ ▼ 连接成功 ✅

参考

  • GLIBC 官方下载:https://ftp.gnu.org/gnu/glibc/
  • patchelf GitHub:https://github.com/NixOS/patchelf
  • 解决 VSCode Remote SSH 远程连接 glibc 高版本依赖问题

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询