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 实机排查流程。

相关推荐
Lethehong15 小时前
双擎并驱·全链路并行:KFS让TB级异构增量同步秒级到达
数据库
MC皮蛋侠客15 小时前
SQLAlchemy 系列(八):AsyncIO、并发与 Web 生命周期——让每个并发任务持有自己的 Session
数据库·python
枫叶v.16 小时前
Prompt Injection 防不住怎么办?从 Source-Sink 模型设计 Agent 安全边界
数据库·安全·prompt
Lucky_Turtle17 小时前
【Milvus】向量数据库
数据库
吴声子夜歌17 小时前
MongoDB 8.0——安全性
数据库·mongodb
xcLeigh17 小时前
KingbaseES 的卢智能运维体架构深度拆解
运维·数据库·人工智能·ai·架构·ffmpeg·智能体
weixin_3975740918 小时前
按行业定制分析视角
大数据·数据库·人工智能·企业数据治理·数据驱动决策·本体语义·企业经营分析
鹿角片ljp18 小时前
Redis 深度复习:从入门到面试通关
数据库·redis·面试
Ming_studying18 小时前
Python + SQLite FTS5 构建本地文档全文搜索器:增量索引、中文检索与高亮
jvm·数据库·python·sqlite
云和恩墨19 小时前
从静态备份到极速恢复:zData S重构多元数据库时代的“第二存储”底座
数据库·重构