Cursor 远程 SSH 连接指南(Windows → Linux/麒麟)

本文整理自实际排查过程,适用于 Cursor(内置 Anysphere Remote SSH)从 Windows 连接局域网内的 Linux/麒麟 主机。


目录

  1. 界面入口
  2. 扩展与冲突
  3. SSH 基础配置
  4. 远端 sshd 要求
  5. 公钥免密(强烈建议)
  6. PowerShell 下 ssh-keygen 空密码
  7. 自检命令
  8. 常见错误与处理
  9. 清理远端 Cursor 服务端
  10. 验收清单
  11. 远端下载 Cursor Server 失败(wget)与本机回退

1. 界面入口

  • 启动页(仅「New project / Open project」)没有远程 SSH 按钮,属正常现象。
  • 打开一个本地文件夹 进入完整编辑界面。
  • Ctrl + Shift + P → 搜索 Remote-SSH: Connect to Host...Connect to Host
  • 左下角 远程/环境 图标(进入完整界面后)也可打开连接菜单。

2. 扩展与冲突

  • Cursor 使用 Anysphere Remote SSH(扩展 ID:anysphere.remote-ssh)。
  • 不要与微软 ms-vscode-remote.remote-ssh 同时混用;若已安装微软版,建议在 Cursor 中 禁用或卸载,避免出现 command ... not found 等冲突。

3. SSH 基础配置

配置文件路径(Windows): C:\Users\<用户名>\.ssh\config

示例:

Host kylin-pc
    HostName 192.168.1.10
    User kylin
    Port 22
    IdentityFile ~/.ssh/id_ed25519

连接测试:

ssh kylin-pc

4. 远端 sshd 要求

Cursor 远程会执行类似命令:ssh -T -D <本地端口> ... bash --login -c bash,并依赖 TCP 转发

在远端检查 生效配置

sudo sshd -T | grep -iE 'allowtcpforwarding|disableforwarding|permitopen|gatewayports'

期望(示例):

建议 说明
allowtcpforwarding yes 动态转发 -D 需要
disableforwarding no 未全局禁止转发
permitopen any(或未限制) 未禁止转发目标
gatewayports no 一般保持即可;与客户端 -D 无冲突

修改配置后重启 sshd(按系统选择):

sudo systemctl restart sshd
# 或
sudo systemctl restart ssh

登录脚本: Cursor 使用 bash --login 且通过 管道 喂安装脚本。若 ~/.bashrc / ~/.profile 在非交互下 read、等待输入、长时间阻塞,会导致长时间无输出。请在 ~/.bashrc 靠前位置保证非交互早退,例如:

case $- in *i*) ;; *) return ;; esac

自测:

bash --login -c 'echo LOGIN_OK'

立即 输出 LOGIN_OK


5. 公钥免密(强烈建议)

仅密码登录时,管道 + Askpass 容易导致 「120 秒内远端无任何数据」 类超时。配置公钥 后稳定性明显提升。

5.1 生成密钥

见下一节 PowerShell 下 ssh-keygen 空密码

5.2 将公钥写入远端(需输入一次密码)

Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh kylin@192.168.1.10 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

5.3 远端权限(公钥被忽略时必查)

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

5.4 验证免密

ssh -o BatchMode=yes -T kylin@192.168.1.10 "echo OK"

成功时应只输出 OK,且 不再提示密码


6. PowerShell 下 ssh-keygen 空密码

错误示例:option requires an argument -- N-N "" 被 PowerShell 吃掉)。

方法一(推荐):交互式, passphrase 直接回车两次

mkdir $env:USERPROFILE\.ssh -Force
ssh-keygen -t ed25519 -f "$env:USERPROFILE\.ssh\id_ed25519"

方法二:非交互空密码

ssh-keygen -t ed25519 -f "$env:USERPROFILE\.ssh\id_ed25519" -N '""'

方法三:使用 cmd 传参

cmd /c "ssh-keygen -t ed25519 -f \"%USERPROFILE%\.ssh\id_ed25519\" -N \"\""

若提示密钥文件已存在,按需选择是否覆盖(y/n)。


7. 自检命令

与本机 ping:

ping -n 2 192.168.1.10

模拟 Cursor 的管道 + 登录 shell(免密后再测):

cmd /c "echo echo PIPE_OK && exit 0| ssh -T kylin@192.168.1.10 bash --login -c bash"

带动态转发(更接近 Cursor):

cmd /c "echo echo D_OK && exit 0| ssh -T -D 19999 kylin@192.168.1.10 bash --login -c bash"

卡住时用调试:

cmd /c "echo echo D_OK && exit 0| ssh -vvv -T -D 19999 kylin@192.168.1.10 bash --login -c bash"

8. 常见错误与处理

8.1 SSH connection timed out after 120s without receiving any data

含义: 连接已发起,但安装/握手阶段 长时间没有任何 Cursor 识别的输出

优先排查顺序:

  1. 公钥免密 是否成功(BatchMode=yes 测试)。
  2. bash --login -c 'echo LOGIN_OK' 是否立即成功。
  3. sshd -Tallowtcpforwarding yes、未禁止转发。
  4. 远端清理 ~/.cursor-server 与锁文件后重试。
  5. Cursor 设置中可适当增大 remote.SSH.connectTimeout(如 300)。

8.2 Permission denied (publickey,password)(配合 BatchMode=yes

通常表示 未配置可用公钥authorized_keys / .ssh 权限不正确。按 §5 修复。

8.3 EBUSY: resource busy or locked(删除临时 .sh 失败)

多为 ssh.exe 仍占用临时文件 或安全软件锁定 %TEMP%

处理: 任务管理器结束 ssh.exe,或 PowerShell:

Get-Process ssh -ErrorAction SilentlyContinue | Stop-Process -Force

然后完全退出并重开 Cursor。

8.4 PowerShell 多行粘贴出现 >>

说明 语句块未闭合多复制了 }。按 Ctrl + C 回到正常提示符,改用 单行命令


9. 清理远端 Cursor 服务端

远端 执行(当前用户即可):

pkill -f cursor-server 2>/dev/null || true
rm -rf ~/.cursor-server
rm -f /tmp/cursor-remote-lock.* 2>/dev/null
rm -f /run/user/$(id -u)/cursor-remote-lock.* 2>/dev/null

说明:删除的是 远程通过 SSH 自动安装的 Cursor Server不会卸载 Windows 上的 Cursor 客户端。下次连接会重新安装服务端。


10. 验收清单

  • 本机 ssh 可登录目标用户与主机。
  • ssh -o BatchMode=yes -T user@host "echo OK" 成功(免密)。
  • 远端 bash --login -c 'echo LOGIN_OK' 立即成功。
  • sudo sshd -T 显示 allowtcpforwarding yes,转发未被禁止。
  • Cursor 仅使用 Anysphere Remote SSH,无微软 Remote SSH 冲突。
  • Connect to Host 后可打开远端目录,内置终端在远端执行命令正常。

11. 远端下载 Cursor Server 失败(wget)与本机回退

SSH 与安装脚本已正常(日志中出现类似 SSH connection established after ... (first stdout received)Configuring Cursor Server on Remote),但随后报错 Download failed: Error downloading server from https://downloads.cursor.com/... 时,问题通常在 远端从公网拉取 Cursor Server 压缩包(约 99MB,linux/arm64 等) 不稳定,而不是 SSH 配置错误。

11.1 日志典型表现

  • 远端:Downloading server via wget ... cursor-reh-linux-arm64.tar.gz
  • wget 进度极慢,或出现 「在 x/103698902 字节处发生读取错误…重试」,最终 放弃操作
  • 安装脚本退出码非 0,stdout 中含:errorMessage==Download failed: ...
  • Cursor 自动回退Downloading server locally and copying it over...(在 Windows%TEMP% 下载同一 URL,再拷贝到远端)

11.2 建议操作(优先顺序)

  1. 先等本机回退跑完
    保持 Cursor 打开,使用 稳定本机网络(有线更佳)。包约 99MB,拷贝与远端解压需 数分钟 属正常。若仍失败,查看日志末尾是否有拷贝/超时错误。

  2. 远端直连差时尝试 IPv4(可选)
    若日志里 wget 常连 IPv6(如 2606:4700::...)且易断,可在 远端 用 IPv4 测下载是否更稳(URL 与 commit 以当前 Cursor 日志为准):

    wget -4 -O /dev/null --timeout=30 "https://downloads.cursor.com/production/<commit>/linux/arm64/cursor-reh-linux-arm64.tar.gz"
    

    -4 明显更好,可按网络环境考虑 优先/仅 IPv4(需符合单位网络策略)。

  3. 重试前清理半成品(远端 kylin 用户示例)

    rm -rf ~/.cursor-server
    rm -f /tmp/cursor-server-*.tar.gz
    rm -f /run/user/$(id -u)/cursor-remote-lock.* 2>/dev/null
    

    然后在 Cursor 中 重新 Connect to Host

  4. 本机与环境

    • 确认 Windows 临时目录与远端家目录 有足够磁盘空间。
    • 若公司网络限制大文件/HTTPS,需在本机配置 系统代理 或换网络后再连。

11.3 与「120s 无数据」的区别

现象 常见含义
长时间无输出后 120s timeout 多为认证、登录脚本、AllowTcpForwarding、Askpass/管道等(见 §8.1)。
已有 Configuring Cursor Serverwget 进度后 Download failed 多为 公网下载质量;依赖 Cursor 本机下载并拷贝 或改善远端出口网络。

参考:Cursor 日志中的典型命令

安装远端服务时,日志中可能出现:

type "<Temp>\cursor_remote_install_<uuid>.sh" | ssh -T -D <port> user@host bash --login -c bash

若本机用 同等条件(尤其 -T-D、管道、bash --login)能尽快得到输出,而 Cursor 仍超时,再结合 扩展版本本机 OpenSSH 版本 与官方论坛进一步排查。


文档生成说明:根据会话中的排查步骤整理;主机名、IP、用户名请按实际环境替换。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐