Windows 使用 Cursor 远程开发完整记录
Windows 使用 Cursor 远程开发完整记录
从被控机安装 OpenSSH,到公钥免密,再到 Cursor 连接与 Server 手动安装排错的全过程。
目录
- 角色与环境
- 安装 sshd
- 密码测试
- 生成密钥
- scp 公钥到被控机
- 写入 administrators_authorized_keys
- BatchMode 验证
- SSH config
- Cursor 连接
- Cursor Server 下载失败与手动安装
- 排错
- 验收清单(DoD)
- 路径速查
- 一句话流程
1. 角色与环境
| 角色 | 说明 | 示例 |
|---|---|---|
| 控制端 | 本机,安装 Cursor,发起连接 | 用户 Lenovo,如 192.168.1.191 |
| 被控端 | 远程 Win10,跑 OpenSSH Server | 用户 LENOVO,如 192.168.1.173 |
前提:同一局域网;被控机防火墙放行 TCP 22。
实测环境:
| 项目 | 值 |
|---|---|
| SSH Host 名 | win10-173 |
| 被控端 IP | 192.168.1.173 |
| 被控端用户 | LENOVO(Administrators 组成员) |
| 密钥 | id_ed25519_win173 / .pub |
| Server commit(以日志为准,会变) | aac81804b986d739acab348ed96b8bea6e83cc50 |
CMD 与 PowerShell
- SSH 登录 Win10 默认常是 CMD(提示符
C:\Users\LENOVO>):不能写$COMMIT = ...。- 要用
$变量:先执行powershell,看到PS C:\...>。- PowerShell 提示符变成
>>:说明多行粘贴未结束,先 Ctrl+C,再逐条执行。
2. 安装 sshd
在被控 Win10,以管理员身份打开 PowerShell:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-Service sshd
netstat -an | findstr ":22"
期望:sshd = Running,0.0.0.0:22 = LISTENING。
可选防火墙规则:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
3. 密码测试
控制端:
ssh LENOVO@192.168.1.173
输入密码能进远端 shell,说明网络与 sshd 正常,然后 exit。
Cursor Remote SSH 必须公钥免密。密码 + Askpass 在管道里易出现
120s without receiving any data。
4. 生成密钥
控制端:
ssh-keygen -t ed25519 -f %USERPROFILE%\.ssh\id_ed25519_win173 -C "cursor-win173"
得到:
- 私钥:
C:\Users\Lenovo\.ssh\id_ed25519_win173 - 公钥:
C:\Users\Lenovo\.ssh\id_ed25519_win173.pub
可不设密码短语,便于 Cursor 无人值守。
5. scp 公钥到被控机
控制端:
scp %USERPROFILE%\.ssh\id_ed25519_win173.pub LENOVO@192.168.1.173:C:\Users\LENOVO\id_ed25519_win173.pub
看到 100% 即传输成功。此时公钥只在用户目录,尚不能免密。
6. 写入 administrators_authorized_keys
关键点
LENOVO 若是管理员组,Windows OpenSSH 不读:
C:\Users\LENOVO\.ssh\authorized_keys
而读:
C:\ProgramData\ssh\administrators_authorized_keys
未写该文件时常见:
Connection reset by authenticating user ... [preauth]Permission denied (publickey,password,keyboard-interactive)(BatchMode)
被控端操作(管理员 PowerShell,逐条)
Stop-Service sshd -Force
Get-Content "C:\Users\LENOVO\id_ed25519_win173.pub"
应有一行 ssh-ed25519 AAAA...。
Get-Content "C:\Users\LENOVO\id_ed25519_win173.pub" | Set-Content "C:\ProgramData\ssh\administrators_authorized_keys" -Encoding ascii
icacls "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r
icacls "C:\ProgramData\ssh\administrators_authorized_keys" /grant "Administrators:F"
icacls "C:\ProgramData\ssh\administrators_authorized_keys" /grant "SYSTEM:F"
Get-Content "C:\ProgramData\ssh\administrators_authorized_keys"
Start-Service sshd
Get-Service sshd
权限只能是 Administrators + SYSTEM,继承打开会导致公钥被拒绝。
若是非管理员用户,则写入:
C:\Users\<用户>\.ssh\authorized_keys
7. BatchMode 验证
控制端(必须通过):
ssh -i %USERPROFILE%\.ssh\id_ed25519_win173 -o IdentitiesOnly=yes -o BatchMode=yes LENOVO@192.168.1.173 "echo OK"
成功:直接输出 OK,无密码提示。
BatchMode=yes = 禁止交互密码;过关后 Cursor 才稳。
8. SSH config
编辑控制端:C:\Users\Lenovo\.ssh\config
Host win10-173
HostName 192.168.1.173
User LENOVO
IdentityFile ~/.ssh/id_ed25519_win173
IdentitiesOnly yes
验证:
ssh win10-173 "echo OK"
9. Cursor 连接
- 打开 Cursor
- Ctrl+Shift+P → Remote-SSH: Connect to Host…
- 选
win10-173(不要写LENOVO@192.168.1.173) - 首次选平台:Windows
- 打开远程文件夹,如
C:\Users\LENOVO
| 要做 | 不要做 |
|---|---|
连 Host 名 win10-173 |
连 user@ip |
BatchMode 已 OK |
依赖密码弹窗 |
| 平台选 Windows | 误选 Linux(会找 bash) |
首次连接会在被控机安装 Cursor Server。若被控机访问不了 Azure,会卡在下载(见下一节)。
10. Cursor Server 下载失败与手动安装
现象(SSH 已通,装 Server 失败)
| 日志 | 含义 |
|---|---|
'bash' 不是内部或外部命令 |
误用 Linux 脚本;选 Windows |
Configuring Cursor Server on Remote |
SSH 成功,开始装 Server |
Downloading from https://cursor.blob.core.windows.net/.../vscode-reh-win32-x64.tar.gz |
被控机自行下载 |
Download failed / 操作已超时 / 远程主机强制关闭连接 |
被控机访问 Azure 失败 |
Failed to install server within the timeout |
下载超时 |
cursor-remote.lock ... 正被另一进程使用 |
上次失败残留锁 |
Test-Path node.exe = False,但子目录有 node.exe |
解压多了一层目录 |
结论:免密 SSH 成功后,最常见卡点是 Server 包下载。
方案 A(推荐):控制端下载 → scp → 被控机解压
COMMIT 以 Cursor 日志为准(示例):
aac81804b986d739acab348ed96b8bea6e83cc50
下载地址:
https://cursor.blob.core.windows.net/remote-releases/aac81804b986d739acab348ed96b8bea6e83cc50/vscode-reh-win32-x64.tar.gz
目标目录:
C:\Users\LENOVO\.cursor-server\bin\win32-x64\<COMMIT>\
该目录下必须有 node.exe(约 80MB+),不能再套一层 vscode-reh-win32-x64\。
A1. 控制端下载
浏览器打开上面 URL(比 PowerShell 更稳),或:
$COMMIT = "aac81804b986d739acab348ed96b8bea6e83cc50"
$url = "https://cursor.blob.core.windows.net/remote-releases/$COMMIT/vscode-reh-win32-x64.tar.gz"
Invoke-WebRequest -Uri $url -OutFile "$env:USERPROFILE\Downloads\vscode-reh-win32-x64.tar.gz"
PowerShell 必须先设
$COMMIT/$url,再Invoke-WebRequest。整段倒序粘贴会报 Uri 为 Null。
检查大小(约 90MB;几 KB 则是失败页):
dir %USERPROFILE%\Downloads\vscode-reh-win32-x64.tar.gz
注意:VSCodeUserSetup-*.exe 不是 Cursor Server 包。
A2. 传到被控机
scp %USERPROFILE%\Downloads\vscode-reh-win32-x64.tar.gz win10-173:C:\Users\LENOVO\vscode-reh-win32-x64.tar.gz
A3. 被控机清锁并解压
若有残留锁:
taskkill /F /IM node.exe /T
del /F /Q "C:\Users\LENOVO\.cursor-server\bin\win32-x64\aac81804b986d739acab348ed96b8bea6e83cc50\cursor-remote.lock"
PowerShell:
$COMMIT = "aac81804b986d739acab348ed96b8bea6e83cc50"
$dest = "C:\Users\LENOVO\.cursor-server\bin\win32-x64\$COMMIT"
New-Item -ItemType Directory -Force -Path $dest | Out-Null
Remove-Item "$dest\cursor-remote.lock" -Force -ErrorAction SilentlyContinue
tar -xzf "C:\Users\LENOVO\vscode-reh-win32-x64.tar.gz" -C $dest
压缩包常会多一层 vscode-reh-win32-x64\,需上提:
$inner = Join-Path $dest "vscode-reh-win32-x64"
if (Test-Path $inner) {
Move-Item "$inner\*" $dest -Force
Remove-Item $inner -Recurse -Force
}
Remove-Item "$dest\cursor-remote.lock","$dest\cursor-server.tar.gz" -Force -ErrorAction SilentlyContinue
Test-Path "$dest\node.exe"
必须输出 True。
纯 CMD(SSH 默认环境):
mkdir "C:\Users\LENOVO\.cursor-server\bin\win32-x64\aac81804b986d739acab348ed96b8bea6e83cc50"
tar -xzf "C:\Users\LENOVO\vscode-reh-win32-x64.tar.gz" -C "C:\Users\LENOVO\.cursor-server\bin\win32-x64\aac81804b986d739acab348ed96b8bea6e83cc50"
cd /d "C:\Users\LENOVO\.cursor-server\bin\win32-x64\aac81804b986d739acab348ed96b8bea6e83cc50"
xcopy /E /Y /I "vscode-reh-win32-x64\*" .
rmdir /S /Q "vscode-reh-win32-x64"
del /F /Q cursor-remote.lock cursor-server.tar.gz
dir node.exe
A4. 再连 Cursor
关掉失败的远程窗口 → Connect to Host → win10-173。已装好时应跳过下载。
方案 B:被控机代理
配置 HTTP_PROXY / HTTPS_PROXY 后让 Cursor 自动下载。
方案 C:加大超时
仅缓解「慢」,解决不了「完全下不动」。网络不通仍用方案 A。
升级 Cursor 后
Server 的 COMMIT 会变。从失败日志复制新 URL 中的 commit,按方案 A 再装一份。
11. 排错
OpenSSH 日志
Win10 默认没有 C:\ProgramData\ssh\logs\sshd.log。用事件日志:
Get-WinEvent -LogName "OpenSSH/Operational" -MaxEvents 20 | Format-List TimeCreated, Message
| 日志 | 说明 |
|---|---|
Accepted password |
密码登录成功 |
Accepted publickey |
公钥成功(目标) |
Connection reset ... [preauth] |
公钥未生效等 |
Server listening on 0.0.0.0 port 22 |
正在监听 |
详细调试:
ssh -vvv -i %USERPROFILE%\.ssh\id_ed25519_win173 -o IdentitiesOnly=yes -o BatchMode=yes LENOVO@192.168.1.173 "echo OK"
常见问题对照
| 现象 | 原因 | 处理 |
|---|---|---|
| 密码能登,BatchMode 失败 | 管理员公钥路径/权限错 | 第 6 节 |
administrators_authorized_keys 不存在 |
未创建 | 第 6 节 |
Cursor 120s without receiving any data |
密码/Askpass | 先 BatchMode OK,连 Host 名 |
'bash' 不是内部或外部命令 |
平台选成 Linux | 选 Windows |
$COMMIT 不是内部命令 |
在 CMD 里跑了 PowerShell | 先 powershell,或用纯 CMD |
$url 为 Null |
命令粘贴倒序 | 先赋值再 Invoke-WebRequest |
Download failed / 超时 |
被控机访问不了 Azure | 第 10 节手动安装 |
node.exe 在子目录 |
多一层解压目录 | 上提内容到 commit 目录 |
cursor-remote.lock 被占用 |
上次安装未结束 | taskkill + 删 lock |
Connection timed out |
关机/换网/防火墙 | 先 ssh win10-173 "echo OK" |
PowerShell >> |
多行未结束 | Ctrl+C,逐条执行 |
Stop-Service 权限不足 |
非管理员窗口 | 管理员 PowerShell |
12. 验收清单(DoD)
SSH / 免密
- 被控端
sshdRunning,:22LISTENING - 控制端密码 SSH 能登录
- 已生成
id_ed25519_win173 - 公钥已写入
administrators_authorized_keys+ icacls -
BatchMode=yes输出OK -
~/.ssh/config有Host win10-173
Cursor Server / 连接
- 控制端已下载
vscode-reh-win32-x64.tar.gz(约 90MB) - 已 scp 到被控机并解压
-
...\aac81804...\node.exe存在且约 80MB+(已上提,无多余子目录) - 已清
cursor-remote.lock - Cursor Connect to Host →
win10-173成功打开远程文件夹
13. 路径速查
| 用途 | 路径 |
|---|---|
| 控制端私钥 | C:\Users\Lenovo\.ssh\id_ed25519_win173 |
| 控制端公钥 | C:\Users\Lenovo\.ssh\id_ed25519_win173.pub |
| 控制端 SSH config | C:\Users\Lenovo\.ssh\config |
| 被控端临时公钥 | C:\Users\LENOVO\id_ed25519_win173.pub |
| 管理员授权文件 | C:\ProgramData\ssh\administrators_authorized_keys |
| sshd 配置 | C:\ProgramData\ssh\sshd_config |
| OpenSSH 事件日志 | 事件查看器 → OpenSSH → Operational |
| Cursor Server 根 | C:\Users\LENOVO\.cursor-server |
| 当前版本目录 | C:\Users\LENOVO\.cursor-server\bin\win32-x64\<COMMIT>\ |
| 关键文件 | ...\node.exe |
| 锁文件 | ...\cursor-remote.lock |
与其他设备:
| Host | 目标 | 用途 |
|---|---|---|
win10-173 |
Win10 @ 192.168.1.173 | Windows 远程开发 |
yoho-pi5 |
Orange Pi @ 192.168.1.247 | Linux 板子 |
原则相同:Host 名 + 公钥免密 + Cursor 连 Host,不连 user@ip。
Keil 等强 GUI 工具建议 RDP;Cursor Remote SSH 适合编辑、终端、文件管理。
14. 一句话流程
装 sshd
→ 密码测通
→ 生成密钥并 scp 公钥
→ 管理员写入 administrators_authorized_keys + icacls
→ BatchMode 测 OK
→ config 写 Host win10-173
→ Cursor 选 Windows、连 Host 名
→ 若被控机下不了 Server:本机下载 tar.gz → scp → 解压并上提目录 → 确认 node.exe → 清锁 → 重连
两个核心坑:
- 管理员用户公钥必须写在
C:\ProgramData\ssh\administrators_authorized_keys。 - Cursor Server 必须手动放到
...\bin\win32-x64\<COMMIT>\node.exe(解压多一层要上提;CMD 里不要用$变量)。
更多推荐



所有评论(0)