ubuntu18-cursor-remote-ssh-tutorial

Ubuntu 18.04 远程连接 Cursor 教程(GLIBC 2.27 / ARM64)

适用于 Ubuntu 18.04JetPack 4.xJetson NanoGLIBC 2.27 环境,通过 Remote SSH 使用 Cursor。核心问题是 Cursor Server 自带的 Node 需要 GLIBC ≥ 2.28 ,而系统为 2.27


目录

  1. 背景与现象
  2. 方案概述
  3. 远程机操作步骤
  4. [Cursor 连接](#Cursor 连接)
  5. 常见问题
  6. 检查清单
  7. 更稳妥的长期方案

1. 背景与现象

项目 说明
典型系统 Ubuntu 18.04、L4T / JetPack 4.x
GLIBC 多为 2.27
Cursor 行为 ~/.cursor-server 安装服务,自带 linux-arm64Node
冲突 自带 Node 链接 GLIBC_2.28+,在 2.27 上无法运行

常见日志:

text 复制代码
.../node: /lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by .../node)
The bundled NodeJS failed to run, and no system NodeJS executable was found.
Please manually install NodeJS 20 or higher on your remote system

若已安装「系统 Node」但 Cursor 仍报找不到,多半是 SSH 非交互环境未加载 PATH(见第 3.5 节)。


2. 方案概述

不要 通过网上流传的「替换 /lib/.../libc.so.6」等方式升级系统 glibc,极易导致 SSH 不可用或系统损坏

推荐在 不改动系统默认 libc 的前提下:

  1. glibc 2.28 安装到独立前缀(如 /opt/glibc-2.28)。
  2. 安装 官方 Node 20 linux-arm64/usr/local/node20
  3. glibc 2.28 自带的动态加载器 + --library-path 启动 Node(脚本包装)。
  4. 将包装脚本暴露为 node ,并写入 ~/.profile 的 PATH ,保证 ssh user@host "node -v" 可用(与 Cursor 安装脚本一致)。

3. 远程机操作步骤

以下以用户 jetbot 为例,请按实际用户名替换路径。

3.1 并行安装 glibc 2.28

在单独文档或可靠来源指导下,将 glibc 安装到前缀目录 (示例:/opt/glibc-2.28),不要 替换系统默认的 libc.so.6

安装完成后应存在(路径以实际为准):

  • /opt/glibc-2.28/lib/libc-2.28.so
  • /opt/glibc-2.28/lib/ld-linux-aarch64.so.1

3.2 安装 Node 20(官方 linux-arm64)

bash 复制代码
cd /tmp
wget https://nodejs.org/dist/v20.18.0/node-v20.18.0-linux-arm64.tar.xz
tar xf node-v20.18.0-linux-arm64.tar.xz
sudo rm -rf /usr/local/node20
sudo mkdir -p /usr/local/node20
sudo cp -a node-v20.18.0-linux-arm64/* /usr/local/node20/

确认:

bash 复制代码
test -f /usr/local/node20/bin/node && echo OK

版本号可按需调整,须为 Node 20+

3.3 启动脚本(含 libgcc 搜索路径)

创建 ~/node20-glibc-run.sh

bash 复制代码
#!/bin/bash

GLIBC_PATH=/opt/glibc-2.28/lib
SYS_LIB=/usr/lib/aarch64-linux-gnu
NODE_BIN=/usr/local/node20/bin/node

"$GLIBC_PATH/ld-linux-aarch64.so.1" \
  --library-path "$GLIBC_PATH:$SYS_LIB:/lib/aarch64-linux-gnu" \
  "$NODE_BIN" "$@"

说明:

  • /lib/aarch64-linux-gnu :提供 libgcc_s.so.1 。若 --library-path 缺少该目录,可能出现:
    libgcc_s.so.1: cannot open shared object file
  • 若仍缺其它库,使用 find /lib /usr/lib -name 'lib*.so*' 查找后追加到 --library-path(冒号分隔)。
bash 复制代码
chmod +x ~/node20-glibc-run.sh
~/node20-glibc-run.sh -v

期望输出:v20.18.0(或与所装版本一致)。

3.4 用 fake-node 提供 node 命令

bash 复制代码
mkdir -p ~/fake-node
ln -sf ~/node20-glibc-run.sh ~/fake-node/node

确认软链完整:

bash 复制代码
ls -la ~/fake-node/node
readlink -f ~/fake-node/node

3.5 将 PATH 写入 ~/.profile(关键)

仅修改 ~/.bashrc 且文件开头有「非交互即 return」时ssh user@host "node -v" 不会 加载你在后面的 export PATH,Cursor 会报找不到 Node。

~/.profile 靠前位置 (建议在 source ~/.bashrc 相关块之前)增加:

bash 复制代码
export PATH="$HOME/fake-node:$PATH"

若存在 ~/.bash_profile 且不加载 .profile,需在 ~/.bash_profile 中同样加入上述一行,或先 source ~/.profile

登录 shell 自测:

bash 复制代码
hash -r
which node
node -v

期望:which node 指向 ~/fake-node/nodenode -v 为 v20.x。

3.6 从本机验证非交互 SSH(与 Cursor 一致)

Windows 或另一台机器上:

bash 复制代码
ssh jetbot@<板子IP> "which node; node -v"

期望:

text 复制代码
/home/jetbot/fake-node/node
v20.18.0

若此处失败,Cursor 仍可能失败;请先修好 .profile / .bash_profile 再连 Cursor。


4. Cursor 连接

  1. 在 Cursor 中安装并启用 Remote SSH(以当前 Cursor 版本为准)。
  2. 使用 jetbot@192.168.x.x 等形式连接目标主机。
  3. 连接过程中日志大致为:
    • 自带 ~/.cursor-server/.../node 因 GLIBC 失败;
    • 检测到 System node 版本 ≥ 20;
    • 可能将安装目录下的 node 符号链接 到你的 fake-node/node

只要 第 3.6 节 通过,系统 Node 检测通常可通过。


5. 常见问题

5.1 package.json: Unexpected end of JSON input

含义~/.cursor-server 下文件不完整 (下载中断、磁盘满、历史失败残留等)。此时 Node 已能运行,但服务端文件损坏。

处理

bash 复制代码
df -h $HOME
rm -rf ~/.cursor-server

然后在 Cursor 中 重新连接,触发完整重装。

5.2 libgcc_s.so.1: cannot open shared object file

在脚本的 --library-path 中加入 /lib/aarch64-linux-gnu(见第 3.3 节)。

5.3 NODE_BIN 指向的 node 不存在

确认 /usr/local/node20/bin/node 存在,或与 NODE_BIN= 路径一致。

5.4 which node 指向错误脚本或旧路径

检查 PATH 顺序、hash -r,以及 ~/fake-node/node 是否指向正确的 node20-glibc-run.sh


6. 检查清单

  • /opt/glibc-2.28/lib/ld-linux-aarch64.so.1libc-2.28.so 存在
  • /usr/local/node20/bin/node 存在
  • ~/node20-glibc-run.sh -v 输出 v20+
  • ~/fake-node/node~/node20-glibc-run.sh
  • ~/.profile(必要时 ~/.bash_profile)含 export PATH="$HOME/fake-node:$PATH"
  • ssh user@host "which node; node -v"本机测试通过
  • 出现 JSON 解析错误时:检查磁盘空间并 rm -rf ~/.cursor-server
  • 用危险方式替换系统 libc.so.6

7. 更稳妥的长期方案

方案 说明
升级系统 / JetPack 使用 Ubuntu 20.04+ 等自带 GLIBC ≥ 2.28 的镜像,Cursor 一般无需旁路 glibc。
源码编译 Node 20+ 在板子上编译,链接本机 2.27 ,可不依赖 /opt/glibc-2.28,但编译耗时、占资源。

旁路 glibc + 官方预编译 Node 属于 在旧系统上的折中方案,维护成本高于系统升级。


附录:参考命令速查

bash 复制代码
# 系统 glibc 版本
ldd --version | head -1
strings /lib/aarch64-linux-gnu/libc.so.6 | grep '^GLIBC_' | tail -8

# 查找 libgcc
find /lib /usr/lib -name 'libgcc_s.so.1' 2>/dev/null

# 检查 cursor-server 安装大小与 package.json
du -sh ~/.cursor-server 2>/dev/null
wc -c ~/.cursor-server/bin/linux-arm64/*/package.json 2>/dev/null

文档整理自 Ubuntu 18.04 / Jetson Nano + Cursor Remote SSH 实机排查流程。

相关推荐
这个DBA有点耶16 分钟前
云上运维新挑战:当数据库不再“看得见摸得着”
数据库·sql·程序人生·云原生·运维开发·学习方法·dba
AskHarries1 小时前
系统提示词、开发者指令和用户输入的优先级
java·前端·数据库
消失在人海中2 小时前
oracle 数据库多表关联查询
服务器·数据库·oracle
九皇叔叔2 小时前
PostgreSQL/openGauss pg_stats 视图从入门到精通:统计信息、执行计划与慢 SQL 优化实战
数据库·sql·postgresql
南极企鹅2 小时前
MySQL间隙锁&临键锁
数据库·sql·mysql
zh_yt3 小时前
auto-connect remote ssh server
运维·ssh
TDengine (老段)4 小时前
TDengine 压缩编码机制 — 双层压缩架构与类型特化算法
大数据·数据库·物联网·算法·时序数据库·tdengine·涛思数据
苏渡苇5 小时前
Redis 持久化——RDB 快照 vs AOF 日志
数据库·redis·缓存·redis持久化·aof vs rdb
l1t5 小时前
DeepSeek总结的使用 PEG 实现运行时可扩展的 SQL 解析器
数据库·sql
这个DBA有点耶5 小时前
COUNT进阶(续):超大表去重计数的极致优化
数据库·架构·代码规范