Remotte-SSH : can't install the Cursor server

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Hi !

Since last week, my developers have been unable to connect to two servers via SSH.

It was working perfectly, but suddenly it stopped working.

I installed the latest version of Cursor and Remote-SSH on my machine to test and I’m experiencing the same problem.
It seems the error lies here:

info] SSH connection established after 3616ms (first stdout received)
[info] (ssh_tunnel) stdout: Using TMP_DIR: /run/user/1001

[error] Error installing server: [o [RemoteSSHError]: Failed to configure the Cursor server on the remote SSH host. Please check the logs for more details.
at t.installCodeServer (c:\Users\Utilisateur.cursor\extensions\anysphere.remote-ssh-1.0.53\dist\main.js:4:197302)
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
at async c:\Users\Utilisateur.cursor\extensions\anysphere.remote-ssh-1.0.53\dist\main.js:4:477294] {
disconnectReason: ‘unknown’
}
[info] Deleting local script C:\Users\UTILIS~1\AppData\Local\Temp\cursor_remote_install_146d40da-78d5-48b9-9b8e-ca85ba373dd4.sh
[error] Error resolving SSH authority [o [RemoteSSHError]: Failed to configure the Cursor server on the remote SSH host. Please check the logs for more details.
at t.installCodeServer (c:\Users\Utilisateur.cursor\extensions\anysphere.remote-ssh-1.0.53\dist\main.js:4:197302)
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
at async c:\Users\Utilisateur.cursor\extensions\anysphere.remote-ssh-1.0.53\dist\main.js:4:477294] {
disconnectReason: ‘unknown’
}

I tried doing the same thing in VS Code and it works.

Can you help us ?
Thanks !

Steps to Reproduce

Create a new host ssh or use an existent.
Connect remote ssh.

Operating System

Windows 10/11

Version Information

Version: 3.5.33 (user setup)
VSCode Version: 1.105.1
Commit: aac81804b986d739acab348ed96b8bea6e83cc50
Date: 2026-05-22T06:47:48.039Z
Layout: editor
Build Type: Stable
Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
OS: Windows_NT x64 10.0.19045

Additional Information

My remote server is a dedicated server running Debian 12.
SSH in CLI works.
I also check .bashrc, to delete old cursor folder on the serve.

Does this stop you from using Cursor

Yes - Cursor is unusable

Hey, this is part of an already tracked regression in anysphere.remote-ssh: Bug Report: Remote SSH extension v1.0.51 breaks Connect to Host. Version 1.0.53 just shipped and was supposed to fix it: Bug Report: Remote SSH extension v1.0.51 breaks Connect to Host - #18 by Colin, but based on your log you’re already on 1.0.53 and it’s still failing during the server install phase.

Can you reply in that thread under Colin’s post and say that 1.0.53 doesn’t help? That’ll help the team see the fix doesn’t cover this case.

For now, as a workaround, roll back to v1.0.50 and disable auto-update:

  • Extensions panel Ctrl+Shift+X, find anysphere.remote-ssh.
  • Click the gear next to the extension, then Install Another Version..., then pick 1.0.50.
  • In the same menu, uncheck Auto Update so it won’t update back.
  • Run Ctrl+Shift+P then Developer: Reload Window.

After that, Remote-SSH Connect to Host should work. If it doesn’t, send the full log from the Remote-SSH output panel.

Yes, sorry, I forgot to mention that, but I did see the other thread. Even after installing version 1.0.50, I have the same problem.

That’s why I created another topic. Would you still like me to reply to the other one?

here is the ful output log (i just hide the server name)

log.txt (3,5 Ko)

No, stay in this thread. Your error is different from that regression. Your SSH tunnel comes up fine, the install script starts on the remote and then crashes there. This is a server-side issue, not the 1.0.51 client bug, so downgrading didn’t help.

Most often it’s one of these two:

  1. /run/user/1001 is mounted as tmpfs with noexec (common on some Debian setups), and the installer can’t run the unpacked binaries from TMP_DIR.
  2. After you deleted the old .cursor folder on the server, some leftovers stayed behind, or $HOME (or the partition for ~/.cursor-server) is also mounted with noexec.

Can you send the following from the remote host, using the same user you connect with:

mount | grep -E "/run/user/1001|$HOME"
ls -la /run/user/1001
ls -la ~/.cursor-server ~/.cursor 2>/dev/null
cat ~/.cursor-server/.cursor-server.log 2>/dev/null | tail -80
df -h /run/user/1001 $HOME

And if it exists, the contents of ~/.cursor-server/.cursor-server.log (or any *.log in ~/.cursor-server). It should show exactly what part of the install is failing.

Workaround A: if /run/user/1001 has noexec. Add this on the remote in ~/.bashrc (or ~/.profile):

export XDG_RUNTIME_DIR="$HOME/.cache/cursor-runtime"
mkdir -p "$XDG_RUNTIME_DIR"
chmod 700 "$XDG_RUNTIME_DIR"

Workaround B: if the partition with ~/.cursor-server has noexec. Move the directory to a partition with exec and make a symlink:

mkdir -p /path/to/exec-partition/.cursor-server
mv ~/.cursor-server /path/to/exec-partition/.cursor-server 2>/dev/null || true
ln -s /path/to/exec-partition/.cursor-server ~/.cursor-server

After either workaround, in Cursor run Ctrl+Shift+P then Remote-SSH: Kill VS Code Server on Host..., then connect again. If noexec is the cause, it should work.

Hi,

Here is the result of the commands :

user@ns-lars:~$ mount | grep -E “/run/user/1001| $HOME”
tmpfs on /run/user/1001 type tmpfs (rw,nosuid,nodev,relatime,size=3246512k,nr_inodes=811628,mode=700,uid=1001,gid=1001,inode64)

user@ns-lars:~$ ls -la /run/user/1001
total 0
drwx------ 5 user user 160 Jun 3 14:32 .
drwxr-xr-x 4 root root 80 Jun 3 13:27 ..
drwx------ 2 user user 140 May 27 12:59 gnupg
srw-rw-rw- 1 user user 0 May 27 12:59 pk-debconf-socket
drwxr-xr-x 4 user user 120 May 27 12:59 systemd
drwxr-xr-x 2 user user 40 May 27 13:00 test
srwxr-xr-x 1 user user 0 May 27 13:00 vscode-git-9eaadfd9f1.sock
srwxr-xr-x 1 user user 0 May 27 12:59 vscode-ipc-db408cfa-0746-4542-98c6-a46c81c61da3.sock

user@ns-lars:~$ ls -la ~/.cursor-server ~/.cursor 2>/dev/null

user@ns-lars:~$ cat ~/.cursor-server/.cursor-server.log 2>/dev/null | tail -80

user@ns-lars:~$ df -h /run/user/1001 $HOME
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.1G 0 3.1G 0% /run/user/1001
/dev/md5 438G 65G 351G 16% /home

As you can see there is no “noexec” on the partition.

I tried workaround A to test, we can see the tmp folder changing but still the same error :

2026-06-03 14:34:37.361 [info] Resolving ssh remote authority ‘myserver’ (Unparsed ‘ssh-remote+7b22686f73744e616d65223a226e732d6c6172732e69642d696e7465726163746976652e6672227d’) (attempt #1)
2026-06-03 14:34:37.366 [info] SSH askpass server listening on port 64824
2026-06-03 14:34:37.386 [info] Using configured platform linux for remote host myserver
2026-06-03 14:34:37.390 [info] Using askpass script: c:\Users\Utilisateur.cursor\extensions\anysphere.remote-ssh-1.0.53\dist\scripts\launchSSHAskpass.bat with javascript file c:\Users\Utilisateur.cursor\extensions\anysphere.remote-ssh-1.0.53\dist\scripts\sshAskClient.js. Askpass handle: 64824
2026-06-03 14:34:37.407 [info] Launching SSH server via shell with command: type “C:\Users\UTILIS~1\AppData\Local\Temp\cursor_remote_install_3e66d62f-b137-413d-a919-2bff55174832.sh” | ssh -T -D 64825 myserver bash --login -c bash
2026-06-03 14:34:37.407 [info] Establishing SSH connection: type “C:\Users\UTILIS~1\AppData\Local\Temp\cursor_remote_install_3e66d62f-b137-413d-a919-2bff55174832.sh” | ssh -T -D 64825 myserver bash --login -c bash
2026-06-03 14:34:37.408 [info] Started installation script. Waiting for it to finish…
2026-06-03 14:34:37.408 [info] Waiting for SSH handshake (timeout: 120s). Install timeout: 30s.
2026-06-03 14:34:37.821 [info] Askpass server received request: POST /
2026-06-03 14:34:37.822 [info] Askpass server received request body: {“request”:"user@myserver’s password: "}
2026-06-03 14:34:37.823 [info] Pausing timeout; waiting for askpass response
2026-06-03 14:34:37.823 [info] Received SSH askpass request: user@myserver’s password:
2026-06-03 14:34:44.263 [info] Resuming timeout; askpass response received
2026-06-03 14:34:44.490 [info] (ssh_tunnel) stdout: Configuring Cursor Server on Remote

2026-06-03 14:34:44.490 [info] SSH connection established after 7083ms (first stdout received)
2026-06-03 14:34:44.493 [info] (ssh_tunnel) stdout: Using TMP_DIR: /home/user/www/.cache/cursor-runtime

2026-06-03 14:34:44.512 [info] (ssh_tunnel) stdout: Killing all running Cursor servers

2026-06-03 14:34:44.523 [info] (ssh_tunnel) stdout: No running code servers found
Killing running code servers:

2026-06-03 14:34:44.526 [info] (ssh_tunnel) stdout: Killing all running multiplex servers

2026-06-03 14:34:44.536 [info] (ssh_tunnel) stdout: No running multiplex servers found
Killing running multiplex servers:

2026-06-03 14:34:44.562 [error] Error installing server: Failed to configure the Cursor server on the remote SSH host. Please check the logs for more details.
2026-06-03 14:34:44.562 [info] Deleting local script C:\Users\UTILIS~1\AppData\Local\Temp\cursor_remote_install_3e66d62f-b137-413d-a919-2bff55174832.sh
2026-06-03 14:34:44.579 [error] Error resolving SSH authority Failed to configure the Cursor server on the remote SSH host. Please check the logs for more details.

Thanks for the detailed logs, they really help.

One important thing up front. This is not the 1.0.51 regression where it fails with Could not resolve hostname 7b22..., so downgrading wouldn’t help. Your SSH tunnel comes up fine, the install script starts on the server, it kills old servers, then it fails exactly at the step where it should download cursor-server. noexec and disk space look fine, so workaround A or B isn’t relevant here.

Key point. cursor-server is downloaded from cursor.blob.core.windows.net, while VS Code downloads its server from a different CDN from Microsoft. So VS Code can work even if the server can’t reach our download host due to firewall or egress rules, or if the artifact returns 404.

First, grab the exact URL from the log. Open Output → Remote-SSH in Cursor. When it tries to connect, you should see a line like server download URL: https://cursor.blob.core.windows.net/remote-releases/.... Copy it exactly so we don’t have to guess the artifact name format.

Then, from the server, as the same user you connect with, run:

curl -IL --max-time 20 https://cursor.blob.core.windows.net/
curl -IL --max-time 20 "<paste the server download URL from the log here>"

If you can’t find the download URL line in the log, use an approximate path for the second curl. The HTTP status code will still tell us what’s going on:

curl -IL --max-time 20 "https://cursor.blob.core.windows.net/remote-releases/3.5.33-aac81804b986d739acab348ed96b8bea6e83cc50/vscode-reh-linux-x64.tar.gz"

How to read the result:

  • It hangs, Connection refused, or times out. Outbound traffic to cursor.blob.core.windows.net is blocked on the server. You’ll need to allow that domain in your firewall, or install the server manually offline. Guide: How to download cursor remote-ssh server manually?
  • It returns 404. The artifact for that build is missing or the path is wrong. Send the output and we’ll dig in.
  • It returns 200 or 206. Network looks fine, so we should look elsewhere. Do a clean reinstall and send the full log:
    • Ctrl+Shift+PRemote-SSH: Kill VS Code Server on Host...
    • On the server: rm -rf ~/.cursor-server
    • Reconnect and paste the full Output → Remote-SSH log from start to the error, and a bit after.

Send the curl results first. That will tell us right away where to look next.

Ok thanks !
I didn’t find the url in the log so here is the status code with the approximate path :

HTTP/1.1 200 OK
Content-Length: 106157985
Content-Type: application/x-tar
Content-MD5: TzNkYr/p9o2T+QtCGzEZVA==
Last-Modified: Fri, 22 May 2026 07:46:27 GMT
ETag: 0x8DEB7D63B2F97DE
Vary: Origin
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: 8c7bf285-201e-002b-6365-f3e368000000
x-ms-version: 2009-09-19
x-ms-lease-status: unlocked
x-ms-blob-type: BlockBlob
Date: Wed, 03 Jun 2026 14:28:56 GMT

So i did a clean reinstall and here is the output Log :

[info] Resolving ssh remote authority ‘myserver’ (Unparsed ‘ssh-remote+7b22686f73744e616d65223a226e732d6c6172732e69642d696e7465726163746976652e6672227d’) (attempt #1)
[info] SSH askpass server listening on port 51456
[debug] hostname: myserver, remote platform map: {“ns-jeff.XXXX”:“linux”,“myserver”:“linux”,“Knkvez9iZJDkt5uyzka”:“linux”,“ns-johnny.XXXX”:“linux”,“ns-neil.XXXX”:“linux”}
[info] Using configured platform linux for remote host myserver
[debug] hostname: myserver, remote server install map: {}
[debug] hostname: myserver, server port range map: {}
[info] Using askpass script: c:\Users\Utilisateur.cursor\extensions\anysphere.remote-ssh-1.0.53\dist\scripts\launchSSHAskpass.bat with javascript file c:\Users\Utilisateur.cursor\extensions\anysphere.remote-ssh-1.0.53\dist\scripts\sshAskClient.js. Askpass handle: 51456
[info] Launching SSH server via shell with command: type “C:\Users\UTILIS~1\AppData\Local\Temp\cursor_remote_install_335d9567-af96-4e40-b4a1-2feb141b5703.sh” | ssh -T -D 51458 myserver bash --login -c bash
[info] Establishing SSH connection: type “C:\Users\UTILIS~1\AppData\Local\Temp\cursor_remote_install_335d9567-af96-4e40-b4a1-2feb141b5703.sh” | ssh -T -D 51458 myserver bash --login -c bash
[info] Started installation script. Waiting for it to finish…
[info] Waiting for SSH handshake (timeout: 120s). Install timeout: 30s.
[info] Askpass server received request: POST /
[info] Askpass server received request body: {“request”:"user@myserver’s password: "}
[info] Pausing timeout; waiting for askpass response
[info] Received SSH askpass request: user@myserver’s password:
[info] Resuming timeout; askpass response received
[info] (ssh_tunnel) stdout: Configuring Cursor Server on Remote

[info] SSH connection established after 6507ms (first stdout received)
[info] (ssh_tunnel) stdout: Using TMP_DIR: /run/user/1001

[info] (ssh_tunnel) stdout: Killing all running Cursor servers

[info] (ssh_tunnel) stdout: No running code servers found
Killing running code servers:

[info] (ssh_tunnel) stdout: Killing all running multiplex servers

[info] (ssh_tunnel) stdout: No running multiplex servers found
Killing running multiplex servers:

[error] Error installing server: [o [RemoteSSHError]: Failed to configure the Cursor server on the remote SSH host. Please check the logs for more details.
at t.installCodeServer (c:\Users\Utilisateur.cursor\extensions\anysphere.remote-ssh-1.0.53\dist\main.js:4:197302)
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
at async c:\Users\Utilisateur.cursor\extensions\anysphere.remote-ssh-1.0.53\dist\main.js:4:477294] {
disconnectReason: ‘unknown’
}
[info] Deleting local script C:\Users\UTILIS~1\AppData\Local\Temp\cursor_remote_install_335d9567-af96-4e40-b4a1-2feb141b5703.sh
[error] Error resolving SSH authority [o [RemoteSSHError]: Failed to configure the Cursor server on the remote SSH host. Please check the logs for more details.
at t.installCodeServer (c:\Users\Utilisateur.cursor\extensions\anysphere.remote-ssh-1.0.53\dist\main.js:4:197302)
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
at async c:\Users\Utilisateur.cursor\extensions\anysphere.remote-ssh-1.0.53\dist\main.js:4:477294] {
disconnectReason: ‘unknown’
}

Also i check on the home or in /run/user/1001 and there is no trace of cursor :

user@ns-lars:~$ ls -la /run/user/1001/
total 0
drwx------ 5 user user 160 Jun 3 16:40 .
drwxr-xr-x 4 root root 80 Jun 3 13:27 ..
drwx------ 2 user user 140 May 27 12:59 gnupg
srw-rw-rw- 1 user user 0 May 27 12:59 pk-debconf-socket
drwxr-xr-x 4 user user 120 May 27 12:59 systemd
drwxr-xr-x 2 user user 40 May 27 13:00 test
srwxr-xr-x 1 user user 0 May 27 13:00 vscode-git-9eaadfd9f1.sock
srwxr-xr-x 1 user user 0 May 27 12:59 vscode-ipc-db408cfa-0746-4542-98c6-a46c81c61da3.sock

Thanks, the logs make the situation almost clear.

Key point: the issue is NOT the server download and not the network. Your curl returned 200 OK, the artifact is there, noexec and disk look fine. It’s also not a 1.0.51 regression, so rolling back wouldn’t help.

Look at the sequence: the script reaches Killing all running multiplex serversNo running multiplex servers found and then crashes right away. It never reaches the lock/download/extract steps, and it doesn’t print its own error. This usually happens when something in the server login shell environment breaks the install protocol. Cursor runs the install like echo "script" | ssh ... bash --login, and any of these in .bashrc / .bash_profile / .profile can break the pipeline:

  • output to stdout (echo/printf, banners, neofetch/fortune, etc.)
  • auto-starting tmux / screen / zsh / fish
  • reading from stdin (read)
  • early exit / return

VS Code can still work because it uses a different CDN and parses server output differently, so “VS Code works” doesn’t prove much here. You also mentioned editing .bashrc, so it’s very likely the cause.

Do this step by step:

  1. Test the pipe pipeline. From your Windows machine (cmd/PowerShell) run exactly what Cursor does, it pipes a command into ssh:
echo "echo hello" | ssh myserver

If the response is only hello, the pipeline is clean. If it hangs, asks for interactive input, or prints extra text or garbage, then startup files are interfering and that’s the reason.

  1. Check the login shell with markers:
ssh -T myserver "bash --login -c 'echo START_MARKER; whoami; echo END_MARKER'"

Anything between the markers other than your username is extra output that breaks the install.

  1. Send the contents of your startup files, from the same user you connect as:
echo "login shell: $SHELL"
cat ~/.bashrc ~/.bash_profile ~/.profile ~/.bash_login 2>/dev/null

If your login shell is not bash (zsh/fish, for example after chsh), then .bashrc might not be used at all. In that case we need to check the startup files for that shell (~/.zshrc, ~/.config/fish/config.fish).

If you see anything from the list above, comment it out temporarily, especially lines with rm, anything that starts tmux/screen, or anything that prints text. Interactive stuff should be wrapped so it only runs in interactive sessions and not during the non-interactive install script:

[[ $- == *i* ]] && { tmux; }   # run only in an interactive session
  1. Before reconnecting, clear stuck state from previous attempts on the server:
rm -rf ~/.cursor-server /tmp/cursor-remote-lock.* /tmp/cursor-server-*.tar.gz

Then in Cursor run Ctrl+Shift+PRemote-SSH: Kill VS Code Server on Host... and reconnect.

Send the results from steps 1 and 2 and the startup file contents. It should be obvious from that what’s breaking the install.


Thank you for your time !

  1. Here is the first result :

PS C:\Users\Utilisateur\Downloads> echo “echo hello” | ssh user@myserver
Pseudo-terminal will not be allocated because stdin is not a terminal.
user@myserver’s password:
Linux ns-lars 6.1.0-25-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.106-3 (2024-08-26) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
hello
PS C:\Users\Utilisateur\Downloads>

  1. Here is the second :

PS C:\Users\Utilisateur\Downloads> ssh -T user@myserver “bash --login -c ‘echo START_MARKER; whoami; echo END_MARKER’”
user@myserver’s password:
START_MARKER
user
END_MARKER

  1. Output :

user@ns-lars:~$ echo “login shell: $SHELL”
login shell: /bin/bash
user@ns-lars:~$ cat ~/.bashrc ~/.bash_profile ~/.profile ~/.bash_login 2>/dev/null
user@ns-lars:~$

(There isn’t normally a bash.rc; I created one just for testing before).

I also clean all folder or files that’s concern cursor on the server.

Thanks for your help.


Great data, it rules out a lot. Here’s what we’ve already excluded:

  • noexec and disk space are fine.
  • Downloading cursor-server and the network are fine, curl returned 200 OK, the artifact is there.
  • It’s not a 1.0.51 regression, the tunnel comes up and the script starts on the server.
  • Startup files and the login shell are clean, the marker test bash --login -c returned exactly START_MARKER / user / END_MARKER with no extra output. The MOTD banner in the pipe test only showed up because that was an interactive ssh without -T. The real install runs with -T, and in that mode it’s clean.

What’s still weird is that the script dies right after Killing all running multiplex serversNo running multiplex servers found, before the Locking step, and it doesn’t print its own error. To see the exact line that crashes, let’s capture the install script and run it with bash -x tracing.

Step 1, capture the script on the Windows machine in PowerShell, before you click Connect:

$dest = "$env:USERPROFILE\Downloads\captured_install.sh"
$fsw = New-Object System.IO.FileSystemWatcher $env:TEMP, "cursor_remote_install_*.sh"
$fsw.EnableRaisingEvents = $true
Write-Host "Watching TEMP... now start Remote-SSH Connect in Cursor"
$res = $fsw.WaitForChanged([System.IO.WatcherChangeTypes]::Created, 120000)
if (-not $res.TimedOut) {
    Copy-Item (Join-Path $env:TEMP $res.Name) $dest -Force
    Write-Host "Captured -> $dest"
}

Step 2, without closing that window, in Cursor run Remote-SSH: Connect to Host to myserver. The script will appear in TEMP, and a copy will be saved to Downloads\captured_install.sh.

Step 3, copy the script to the server from the same Windows machine, from PowerShell, not after ssh:

scp "$env:USERPROFILE\Downloads\captured_install.sh" user@myserver:/tmp/captured_install.sh

Step 4, on the server run it with tracing and send the tail:

bash -x /tmp/captured_install.sh 2>&1 | tail -60

In the output, lines starting with + show the last command that ran before it died. That’s the failure point. Send those ~60 lines and it should be clear what’s breaking.

Hi !
Very strange the script seems to work :

user@ns-lars:/tmp$ bash captured_install.sh
Configuring Cursor Server on Remote
Using TMP_DIR: /tmp
Locking /tmp/cursor-remote-lock.63a4bc58ecd2bd7a00226241b7fabb40
Downloading server via wget from https://downloads.cursor.com/production/81fcf2931d7687b4ff3f3017858d0c6dee7e2a68/linux/x64/cursor-reh-linux-x64.tar.gz to cursor-server-795cd606-f459-44e6-b613-9e63d78bd7e6.tar.gz
–2026-06-04 09:30:10-- https://downloads.cursor.com/production/81fcf2931d7687b4ff3f3017858d0c6dee7e2a68/linux/x64/cursor-reh-linux-x64.tar.gz
Resolving downloads.cursor.com (downloads.cursor.com)… 2606:4700::6812:1180, 2606:4700::6812:1080, 104.18.17.128, …
Connecting to downloads.cursor.com (downloads.cursor.com)|2606:4700::6812:1180|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 106132911 (101M) [application/gzip]
Saving to: ‘cursor-server-795cd606-f459-44e6-b613-9e63d78bd7e6.tar.gz’

cursor-server-795cd606-f459-44e6-b613-9e63d7 100%[===========================================================================================>] 101.22M 306MB/s in 0.3s

2026-06-04 09:30:10 (306 MB/s) - ‘cursor-server-795cd606-f459-44e6-b613-9e63d78bd7e6.tar.gz’ saved [106132911/106132911]

Extracting server contents from cursor-server-795cd606-f459-44e6-b613-9e63d78bd7e6.tar.gz
Extracting…
Checking node executable
v20.18.2
Checking for running multiplex server: /home/user/www/.cursor-server/bin/multiplex-server/3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8.js
Running multiplex server:
Creating multiplex server token file /tmp/cursor-remote-multiplex.token.63a4bc58ecd2bd7a00226241b7fabb40.3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8
Creating directory for multiplex server: /home/user/www/.cursor-server/bin/multiplex-server
Writing multiplex server script to /home/user/www/.cursor-server/bin/multiplex-server/3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8.js
Starting multiplex server: /home/user/www/.cursor-server/bin/linux-x64/81fcf2931d7687b4ff3f3017858d0c6dee7e2a60/node /home/user/www/.cursor-server/bin/multiplex-server/3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8.js 7630af3c-ec81-4590-b2bb-b20986c32e09 0
Multiplex server started with PID 1950019 and wrote pid to file /tmp/cursor-remote-multiplex.pid.63a4bc58ecd2bd7a00226241b7fabb40.3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8
Reading multiplex server token file /tmp/cursor-remote-multiplex.token.63a4bc58ecd2bd7a00226241b7fabb40.3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8
Multiplex server token file found
Reading multiplex server log file /tmp/cursor-remote-multiplex.log.63a4bc58ecd2bd7a00226241b7fabb40.3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8
Checking for code servers
Code server script is not running
Creating code server token file /tmp/cursor-remote-code.token.63a4bc58ecd2bd7a00226241b7fabb40
Starting code server script /home/user/www/.cursor-server/bin/linux-x64/81fcf2931d7687b4ff3f3017858d0c6dee7e2a60/bin/cursor-server --start-server --host=127.0.0.1 --port 0 --connection-token-file /tmp/cursor-remote-code.token.63a4bc58ecd2bd7a00226241b7fabb40 --telemetry-level off --enable-remote-auto-shutdown --accept-server-license-terms &> /tmp/cursor-remote-code.log.63a4bc58ecd2bd7a00226241b7fabb40 &
Code server started with PID 1950068 and wrote pid to file /tmp/cursor-remote-code.pid.63a4bc58ecd2bd7a00226241b7fabb40
Code server log file is /tmp/cursor-remote-code.log.63a4bc58ecd2bd7a00226241b7fabb40
7df0734df26bd3308d14e9a3: start
exitCode==0==
nodeExecutable==/home/user/www/.cursor-server/bin/linux-x64/81fcf2931d7687b4ff3f3017858d0c6dee7e2a60/node==
errorMessage====
isFatalError==false==
multiplexListeningOn==34313==
multiplexConnectionToken==7630af3c-ec81-4590-b2bb-b20986c32e09==
codeListeningOn==35199==
codeConnectionToken==943c627e-2904-4680-8f38-44a1ed121af0==
detectedPlatform==linux==
arch==x64==
SSH_AUTH_SOCK====
DISPLAY====
7df0734df26bd3308d14e9a3: end
Unlocking /tmp/cursor-remote-lock.63a4bc58ecd2bd7a00226241b7fabb40


  • This terminal is used to establish and maintain the SSH connection. *
  • Closing this terminal will terminate the connection and disconnect *
  • Cursor from the remote server. *

After launching the script on the server, I tried connecting again from the cursor application but still got the same error, which is very strange because the server installation seems to have worked “manually” with the bash script.


This is a really useful result, it clears up almost everything.

Here’s what we’re seeing. When you run the captured script as a file, bash captured_install.sh, it completes end to end: it downloads, unpacks, starts multiplex and code server, and finishes with exitCode==0==. So the script itself and the server look fine.

But Cursor runs it differently. The log shows:

type "...cursor_remote_install_....sh" | ssh -T -D PORT myserver bash --login -c bash

So the script is piped into stdin of bash --login -c bash, not passed as a file argument. I think that’s the difference. Some command in the Killing all running multiplex servers step likely reads from stdin and “consumes” the rest of the script. That would explain why the install quietly stops exactly there with no error from the script. When you run it as a file, stdin is free, so everything works.

Let’s confirm it. On the server, as the same user, run the script via stdin the same way Cursor does:

bash --login -c bash < /tmp/captured_install.sh

If it stops right after No running multiplex servers found like it does in Cursor, the hypothesis is confirmed.

Also, please send the contents of captured_install.sh, mainly the part between Killing all running multiplex servers and Locking. That will show which exact command is reading stdin.

If this is confirmed, it’s a bug in the Remote-SSH extension install mechanism, not your server or network. I’ll report it internally. For now, please stick with the VS Code server, or install the cursor-server manually: How to download cursor remote-ssh server manually?

Ok ! Before running the test again, I removed all traces of the server cursor from the home and /tmp directories, to ensure a clean installation.
So here is the result :

user@ns-lars:/tmp$ bash --login -c bash < /tmp/captured_install.sh
Configuring Cursor Server on Remote
Using TMP_DIR: /tmp

And it stop here.
If I look in the home or /tmp folder, there’s no trace of the cursor server, so it seems the installation didn’t work as you described.

Here the complete script :

complete_captured_install.txt (41,9 Ko)

Thanks, this confirms the hypothesis. When the script is run as a file bash captured_install.sh, it completes successfully. When it’s fed via stdin using bash --login -c bash < ... (and that’s how Cursor runs the install: type "...sh" | ssh -T -D PORT host bash --login -c bash), it silently stops right at the start. So the issue isn’t your server, network, or shell. It’s a bug in the Remote-SSH extension install mechanism itself. Some command inside the script reads from stdin and consumes the rest of the script.

This is on our side, and I’ve reported it internally. I can’t share an ETA for a fix yet. Once I have an update, I’ll reply in this thread.

For now, the workaround is to use VS Code Remote-SSH for those hosts. It connects fine to the same servers since it uses a different mechanism, so it’s not affected.

Thanks again for your patience and the detailed logs. Without them, it would’ve been much harder to find the root cause.

No problem about the time spent! Thank you for following up :ok_hand: