Connection to Cursor server failed: Couldn't install Cursor Server, install script returned non-zero exit status

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Installation succeeds (the remote directory ~/.cursor-server/bin/<commit_id>/ is present), but the process still returns an error. Full log is as follows:

[info] SSH askpass server listening on port 50749
[debug] hostname: 2.120, remote platform map: {"2.120":"linux","2.4":"linux"}
[info] Using configured platform linux for remote host 2.120
[debug] hostname: 2.120, remote server install map: {}
[debug] hostname: 2.120, server port range map: {}
[info] Using askpass script: c:\Users\name\.cursor\extensions\anysphere.remote-ssh-1.0.35\dist\scripts\launchSSHAskpass.bat with javascript file c:\Users\name\.cursor\extensions\anysphere.remote-ssh-1.0.35\dist\scripts\sshAskClient.js. Askpass handle: 50749
[info] Launching SSH server via shell with command: type "C:\Users\name\AppData\Local\Temp\cursor_remote_install_ddb6647f-63e9-4aa9-9e1a-b26f31ac693d.sh" | ssh -T -D 50751 2.120 bash --login -c bash
[info] Establishing SSH connection: type "C:\Users\name\AppData\Local\Temp\cursor_remote_install_ddb6647f-63e9-4aa9-9e1a-b26f31ac693d.sh" | ssh -T -D 50751 2.120 bash --login -c bash
[info] Started installation script. Waiting for it to finish...
[info] Waiting for server to install. Timeout: 30000ms
[info] (ssh_tunnel) stderr: Welcome to JumpServer SSH Server

[info] (ssh_tunnel) stdout: 
echo "Configuring Cursor Server on Remote"


SERVER_COMMIT="56f0a83df8e9eb48585fcc4858a9440db4cc7770"
SERVER_REAL_COMMIT="56f0a83df8e9eb48585fcc4858a9440db4cc7771"
SERVER_LINE="production"
SERVER_DATA_DIR="$HOME/.cursor-server"
PORT_RANGE=""

# Probe for writable temporary directory
probe_tmp_dir() {
    if [[ -n "${XDG_RUNTIME_DIR}" && -d "${XDG_RUNTIME_DIR}" ]]; then
        local test_file="${XDG_RUNTIME_DIR}/cursor-test-$(date +%s)-$RANDOM"
        if touch "$test_file" 2>/dev/null && [[ -f "$test_file" ]]; then
            rm -f "$test_file"
            echo "${XDG_RUNTIME_DIR}"
            return 0
        fi
    fi
    if [[ -d "/tmp
[info] (ssh_tunnel) stdout: " ]]; then
        local test_file="/tmp/cursor-test-$(date +%s)-$RANDOM"
        if touch "$test_file" 2>/dev/null && [[ -f "$test_file" ]]; then
            rm -f "$test_file"
            echo "/tmp"
            return 0
        fi
    fi
    echo "$SERVER_DATA_DIR"  # fallback
}

TMP_DIR="$(probe_tmp_dir)"
echo "Using TMP_DIR: $TMP_DIR"
SERVER_DIR="$SERVER_DATA_DIR/bin/56f0a83df8e9eb48585fcc4858a9440db4cc7770"
SERVER_NODE_EXECUTABLE="$SERVER_DIR/node"
CODE_SERVER_SCRIPT="$SERVER_DIR/bin/cursor-server"
CODE_SERVER_PROCESS_ALL_VERSIONS_GREP_PATTERN="$SERVER_DATA_DIR/bin/.*/out/server-main.js"
CODE_LISTENING_ON=
CODE_SERVER_CONNECTION_TOKEN=
MULTIPLEX_SERVER_SCRIPT="$SERVER_DATA_DIR/bin/multiplex-server/3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8.js"
MULTIPLEX_LISTENING_ON=
SERVER_ARCH=
SERVER_DOWNLOAD_URL=
OS_RELEASE_ID=
ARCH=
PLATFORM=
export PATH="$SERVER_DIR/bin/remote-cli:$PATH"

get_tmp_file() {
    local suffix=$1
    echo "$TMP_DIR/cursor-remote-${suffix}.$(echo $SERVER_DATA_DIR | (md5sum 2>/dev/null || md5) | awk '{print $1}')"
}

get_tmp_file_with_hash() {
    local suffix=$1
    local hash=$2
    echo "$TMP_DIR/cursor-remote-${suffix}.$(echo $SERVER_DATA_DIR | (md5sum 2>/dev/null || md5) | awk '{print $1}').${hash}"
}



CODE_SERVER_LOGFILE="$(get_tmp_file 'code.log')"
CODE_SERVER_TOKENFILE="$(get_tmp_file 'code.token')"
CODE_SERVER_PIDFILE="$(get_tmp_file 'code.pid')"
MULTIPLEX_SERVER_LOGFILE="$(get_tmp_file_with_hash 'multiplex.log' '3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8')"
MULTIPLEX_SERVER_TOKENFILE="$(get_tmp_file_with_hash 'multiplex.token' '3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8')"
MULTIPLEX_SERVER_PIDFILE="$(get_tmp_file_with_hash 'multiplex.pid' '3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8')"
MULTIPLEX_SERVER_PROCESS_ALL_VERSIONS_GREP_PATTERN="$SERVER_DATA_DIR/bin/multiplex-server/.*.js"

# These are magic variables that are used by the code server
exp
[info] (ssh_tunnel) stdout: ort VSCODE_AGENT_FOLDER="$SERVER_DATA_DIR"
export VSCODE_SERVER_SHUTDOWN_TIMEOUT="300"

# If the SSH_AUTH_SOCK is set, we symlink it to a well-known location based on the SSH_AUTH_SOCK_ID
# This is because terminals and other parts of the editor don't update to use the latest SSH_AUTH_SOCK
if [[ -n "$SSH_AUTH_SOCK" ]]; then
    if [[ -n "/tmp/cursor-remote-ssh-auth-sock-db425493-026f-4d1c-a6c6-b481ae72ffbd.sock" ]]; then
        ln -sf "$SSH_AUTH_SOCK" "/tmp/cursor-remote-ssh-auth-sock-db425493-026f-4d1c-a6c6-b481ae72ffbd.sock"
        export SSH_AUTH_SOCK="/tmp/cursor-remote-ssh-auth-sock-db425493-026f-4d1c-a6c6-b481ae72ffbd.sock"
    fi
fi

print_install_results_and_exit() {
    echo "56284375419e16563f0b7b1c: start"
    echo "exitCode==$1=="
    echo "nodeExecutable==$SERVER_NODE_EXECUTABLE=="
    echo "multiplexListeningOn==$MULTIPLEX_LISTENING_ON=="
    echo "multiplexConnectionToken==$MULTIPLEX_SERVER_CONNECTION_TOKEN=="
    echo "codeListeningOn==$CODE_LISTENING_ON=="
    echo "errorMessage==$2=="
    echo "isFatalError==$3=="
    echo "codeConnectionToken==$CODE_SERVER_CONNECTION_TOKEN=="
    echo "detectedPlatform==$PLATFORM=="
    echo "arch==$SERVER_ARCH=="
    echo "SSH_AUTH_SOCK==$SSH_AUTH_SOCK=="
    echo "56284375419e16563f0b7b1c: end"
    exit $1
}

print_install_results_and_wait() {
    # Try to get PIDs from PID files first, fallback to extracting from running processes
    if [[ -f $CODE_SERVER_PIDFILE ]];
[info] Server install command exit code:  1
[error] Error installing server: [Error: Couldn't install Cursor Server, install script returned non-zero exit status
	at t.installCodeServer (c:\Users\name\.cursor\extensions\anysphere.remote-ssh-1.0.35\dist\main.js:2:957522)
	at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
	at async c:\Users\name\.cursor\extensions\anysphere.remote-ssh-1.0.35\dist\main.js:2:406600]
[info] Deleting local script C:\Users\name\AppData\Local\Temp\cursor_remote_install_ddb6647f-63e9-4aa9-9e1a-b26f31ac693d.sh
[error] Error resolving SSH authority [Error: Couldn't install Cursor Server, install script returned non-zero exit status
	at t.installCodeServer (c:\Users\name\.cursor\extensions\anysphere.remote-ssh-1.0.35\dist\main.js:2:957522)
	at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
	at async c:\Users\name\.cursor\extensions\anysphere.remote-ssh-1.0.35\dist\main.js:2:406600]
[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<02120:~$ echo "Configuring Cursor Server on Remote"
Configuring Cursor Server on Remote
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
R(base) name@ubuntu-DeepLearning-4802120:~$ 
<R_COMMIT="56f0a83df8e9eb48585fcc4858a9440db4cc7770"
(base) name@ubuntu-DeepLearning-4802120:~$ 
<L_COMMIT="56f0a83df8e9eb48585fcc4858a9440db4cc7771"
(base) name@ubuntu-DeepLearning-4802120:~$ SERVER_LINE="production"
(base) name@ubuntu-DeepLearning-4802120:~$ 
<g-4802120:~$ SERVER_DATA_DIR="$HOME/.cursor-server"
(base) name@ubuntu-DeepLearning-4802120:~$ PORT_RANGE=""
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<4802120:~$ # Probe for writable temporary directory
(base) name@ubuntu-DeepLearning-4802120:~$ probe_tmp_dir() {
>     if [[ -n "${XDG_RUNTIME_DIR}" && -d "${XDG_RUNTIME_DIR}" ]]; then
> 
<${XDG_RUNTIME_DIR}/cursor-test-$(date +%s)-$RANDOM"
>         if touch "$test_file" 2>/dev/null && [[ -f "$test_file" ]]; then
>             rm -f "$test_file"
>             echo "${XDG_RUNTIME_DIR}"
>             return 0
>         fi
>     fi
>     if [[ -d "/tmp" ]]; then
>         local test_file="/tmp/cursor-test-$(date +%s)-$RANDOM"
>         if touch "$test_file" 2>/dev/null && [[ -f "$test_file" ]]; then
>             rm -f "$test_file"
>             echo "/tmp"
>             return 0
>         fi
>     fi
>     echo "$SERVER_DATA_DIR"  # fallback
> }
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ TMP_DIR="$(probe_tmp_dir)"
(base) name@ubuntu-DeepLearning-4802120:~$ 
<pLearning-4802120:~$ echo "Using TMP_DIR: $TMP_DIR"
Using TMP_DIR: /run/user/2342
(base) name@ubuntu-DeepLearning-4802120:~$ 
<A_DIR/bin/56f0a83df8e9eb48585fcc4858a9440db4cc7770"
(base) name@ubuntu-DeepLearning-4802120:~$ 
<802120:~$ SERVER_NODE_EXECUTABLE="$SERVER_DIR/node"
(base) name@ubuntu-DeepLearning-4802120:~$ 
< CODE_SERVER_SCRIPT="$SERVER_DIR/bin/cursor-server"
(base) name@ubuntu-DeepLearning-4802120:~$ 
<ATTERN="$SERVER_DATA_DIR/bin/.*/out/server-main.js"
(base) name@ubuntu-DeepLearning-4802120:~$ CODE_LISTENING_ON=
(base) name@ubuntu-DeepLearning-4802120:~$ 
<epLearning-4802120:~$ CODE_SERVER_CONNECTION_TOKEN=
(base) name@ubuntu-DeepLearning-4802120:~$ 
<6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8.js"
(base) name@ubuntu-DeepLearning-4802120:~$ MULTIPLEX_LISTENING_ON=
(base) name@ubuntu-DeepLearning-4802120:~$ SERVER_ARCH=
(base) name@ubuntu-DeepLearning-4802120:~$ SERVER_DOWNLOAD_URL=
(base) name@ubuntu-DeepLearning-4802120:~$ OS_RELEASE_ID=
(base) name@ubuntu-DeepLearning-4802120:~$ ARCH=
(base) name@ubuntu-DeepLearning-4802120:~$ PLATFORM=
(base) name@ubuntu-DeepLearning-4802120:~$ 
<0:~$ export PATH="$SERVER_DIR/bin/remote-cli:$PATH"
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ get_tmp_file() {
>     local suffix=$1
> 
< | (md5sum 2>/dev/null || md5) | awk '{print $1}')"
> }
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ get_tmp_file_with_hash() {
>     local suffix=$1
>     local hash=$2
> 
<um 2>/dev/null || md5) | awk '{print $1}').${hash}"
> }
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 

(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<~$ CODE_SERVER_LOGFILE="$(get_tmp_file 'code.log')"

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
[info] (ssh_tunnel) stdout: 
<ODE_SERVER_TOKENFILE="$(get_tmp_file 'code.token')"
(base) name@ubuntu-DeepLearning-4802120:~$ 
<~$ CODE_SERVER_PIDFILE="$(get_tmp_file 'code.pid')"

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
<c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8')"

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
<c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8')"

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
[info] (ssh_tunnel) stdout: 
<c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8')"

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
[info] (ssh_tunnel) stdout: 
<TTERN="$SERVER_DATA_DIR/bin/multiplex-server/.*.js"
(base) name@ubuntu-DeepLearning-4802120:~$ 

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
<re magic variables that are used by the code server
(base) name@ubuntu-DeepLearning-4802120:~$ 
<20:~$ export VSCODE_AGENT_FOLDER="$SERVER_DATA_DIR"
(base) name@ubuntu-DeepLearning-4802120:~$ 
<2120:~$ export VSCODE_SERVER_SHUTDOWN_TIMEOUT="300"
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
[info] (ssh_tunnel) stdout: 
<a well-known location based on the SSH_AUTH_SOCK_ID
(base) name@ubuntu-DeepLearning-4802120:~$ 
[info] (ssh_tunnel) stdout: 
<editor don't update to use the latest SSH_AUTH_SOCK

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
<rning-4802120:~$ if [[ -n "$SSH_AUTH_SOCK" ]]; then
> 
<db425493-026f-4d1c-a6c6-b481ae72ffbd.sock" ]]; then
> 
[info] (ssh_tunnel) stdout: 
<uth-sock-db425493-026f-4d1c-a6c6-b481ae72ffbd.sock"

[info] (ssh_tunnel) stdout: > 
[info] (ssh_tunnel) stdout: 
<uth-sock-db425493-026f-4d1c-a6c6-b481ae72ffbd.sock"
>     fi
> fi
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
[info] (ssh_tunnel) stdout: 
<rning-4802120:~$ print_install_results_and_exit() {
> 
[info] (ssh_tunnel) stdout:     echo "56284375419e16563f0b7b1c: start"
> 
[info] (ssh_tunnel) stdout:     echo "exitCode==$1=="
>     echo "nodeExecutable==$SERVER_NODE_EXECUTABLE=="
> 
[info] (ssh_tunnel) stdout:     echo "multiplexListeningOn==$MULTIPLEX_LISTENING_ON=="
> 
[info] (ssh_tunnel) stdout:     echo "multiplexConnectionToken==$MULTIPLEX_SERVER_CONNECTION_TOKEN=="
>     echo "codeListeningOn==$CODE_LISTENING_ON=="
>     echo "errorMessage==$2=="
>     echo "isFatalError==$3=="

[info] (ssh_tunnel) stdout: > 
[info] (ssh_tunnel) stdout:     echo "codeConnectionToken==$CODE_SERVER_CONNECTION_TOKEN=="
>     echo "detectedPlatform==$PLATFORM=="
>     echo "arch==$SERVER_ARCH=="
>     echo "SSH_AUTH_SOCK==$SSH_AUTH_SOCK=="
>     echo "56284375419e16563f0b7b1c: end"
>     exit $1
> }
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<rning-4802120:~$ print_install_results_and_wait() {
> 
<irst, fallback to extracting from running processes
>     if [[ -f $CODE_SERVER_PIDFILE ]]; then
>         CODE_SERVER_PID="$(cat $CODE_SERVER_PIDFILE)"
>     else
>         # PID file doesn't exist, try to extract PID from running process
> 
<grep $CODE_SERVER_SCRIPT | grep -v grep | head -1)"
> 
[info] (ssh_tunnel) stdout:         if [[ -n "$CODE_SERVER_RUNNING_PROCESS" ]]; then
> 
[info] (ssh_tunnel) stdout: 
<"$CODE_SERVER_RUNNING_PROCESS" | awk '{print $1}')"
>         else

[info] (ssh_tunnel) stdout: > 
<nd no running code server process detected" "false"
>         fi
>     fi
> 
>     if [[ -f $MULTIPLEX_SERVER_PIDFILE ]]; then
>         MULTIPLEX_SERVER_PID="$(cat $MULTIPLEX_SERVER_PIDFILE)"
>     else
>         # PID file doesn't exist, try to extract PID from running process

[info] (ssh_tunnel) stdout: > 
[info] (ssh_tunnel) stdout: 
<$MULTIPLEX_SERVER_SCRIPT | grep -v grep | head -1)"
> 
[info] (ssh_tunnel) stdout:         if [[ -n "$MULTIPLEX_SERVER_RUNNING_PROCESS" ]]; then

[info] (ssh_tunnel) stdout: > 
<TIPLEX_SERVER_RUNNING_PROCESS" | awk '{print $1}')"
>         else

[info] (ssh_tunnel) stdout: > 
<d and no running multiplex server process detected"
> 
<sn't exist, so the while loop will exit immediately
>             MULTIPLEX_SERVER_PID=invalid_pid
>         fi
>     fi
> 
z
[info] (ssh_tunnel) stdout: >     echo "56284375419e16563f0b7b1c: start"
>     echo "exitCode==0=="
>     echo "nodeExecutable==$SERVER_NODE_EXECUTABLE=="

[info] (ssh_tunnel) stdout: >     echo "errorMessage===="
>     echo "isFatalError==false=="
> 
[info] (ssh_tunnel) stdout:     echo "multiplexListeningOn==$MULTIPLEX_LISTENING_ON=="
>     echo "multiplexConnectionToken==$MULTIPLEX_SERVER_CONNECTION_TOKEN=="

[info] (ssh_tunnel) stdout: >     echo "codeListeningOn==$CODE_LISTENING_ON=="
> 
[info] (ssh_tunnel) stdout:     echo "codeConnectionToken==$CODE_SERVER_CONNECTION_TOKEN=="
>     echo "detectedPlatform==$PLATFORM=="
>     echo "arch==$SERVER_ARCH=="
>     echo "SSH_AUTH_SOCK==$SSH_AUTH_SOCK=="
>     echo "56284375419e16563f0b7b1c: end"
>     unlock
>     trap - EXIT
>     echo " "
> 
[info] (ssh_tunnel) stdout: 
<**************************************************"

[info] (ssh_tunnel) stdout: > 
<ed to establish and maintain the SSH connection. *"

[info] (ssh_tunnel) stdout: > 
<al will terminate the connection and disconnect  *"
> 
[info] (ssh_tunnel) stdout: 
<ote server.                                      *"

[info] (ssh_tunnel) stdout: > 
<**************************************************"
> 
[info] (ssh_tunnel) stdout: 
<r over ssh, the code server won't have a connection
>     while kill -0 $CODE_SERVER_PID 2>/dev/null
>     do

[info] (ssh_tunnel) stdout: >         sleep 10
>     done
> 
[info] (ssh_tunnel) stdout:     echo "Code server process $CODE_SERVER_PID died"
>     while kill -0 $MULTIPLEX_SERVER_PID 2>/dev/null
>     do
>         sleep 11
>     done
>     echo "Multiplex server process $MULTIPLEX_SERVER_PID died"

[info] (ssh_tunnel) stdout: >     exit 0
> }
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ get_lockfile() {
> 
< | (md5sum 2>/dev/null || md5) | awk '{print $1}')"

[info] (ssh_tunnel) stdout: > }
(base) name@ubuntu-DeepLearning-4802120:~$ 
 (base) name@ubuntu-DeepLearning-4802120:~$ 
<Learning-4802120:~$ if [[ "true" == "true" ]]; then
> 
[info] (ssh_tunnel) stdout:     echo "Killing all running Cursor servers"
> 
<_ALL_VERSIONS_GREP_PATTERN | grep -v grep || true)"
>     if [[ -z "$CODE_SERVER_RUNNING_PROCESS" ]]; then
>         echo "No running code servers found"
>     fi
>     echo "Killing running code servers: $CODE_SERVER_RUNNING_PROCESS"
>     echo "$CODE_SERVER_RUNNING_PROCESS" | while read -r line; do

[info] (ssh_tunnel) stdout: > 
[info] (ssh_tunnel) stdout:         pid=$(echo "$line" | awk '{print $1}')
>         if [[ -n "$pid" ]]; then
>             echo "Killing server process with PID: $pid"
>             kill -9 "$pid"
>         fi
>     done
>     CODE_SERVER_RUNNING_PROCESS=""
>     echo "Killing all running multiplex servers"
> 
<_ALL_VERSIONS_GREP_PATTERN | grep -v grep || true)"
> 
[info] (ssh_tunnel) stdout:     if [[ -z "$MULTIPLEX_SERVER_RUNNING_PROCESS" ]]; then
>         echo "No running multiplex servers found"
>     fi
> 
<ltiplex servers: $MULTIPLEX_SERVER_RUNNING_PROCESS"
>     echo "$MULTIPLEX_SERVER_RUNNING_PROCESS" | while read -r line; do
>         pid=$(echo "$line" | awk '{print $1}')
>         if [[ -n "$pid" ]]; then
>             echo "Killing server process with PID: $pid"
>             kill -9 "$pid"
>         fi
>     done
>     MULTIPLEX_SERVER_RUNNING_PROCESS=""

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

[info] (ssh_tunnel) stdout: Killing running code servers: 1413297 /home/name/.cursor-server/bin/56f0a83df8e9eb48585fcc4858a9440db4cc7770/node /home/name/.cursor-server/bin/56f0a83df8e9eb48585fcc4858a9440db4cc7770/out/server-main.js --start-server --host=127.0.0.1 --port 0 --connection-token-file /run/user/2342/cursor-remote-code.token.ef11e3312548c10c1b59713f964cb812 --telemetry-level off --enable-remote-auto-shutdown --accept-server-license-terms

[info] (ssh_tunnel) stdout: Killing server process with PID: 1413297

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

[info] (ssh_tunnel) stdout: Killing running multiplex servers: 1413258 /home/name/.cursor-server/bin/56f0a83df8e9eb48585fcc4858a9440db4cc7770/node /home/name/.cursor-server/bin/multiplex-server/3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8.js 00865866-a0f1-46fc-a515-a1b666179554 0
Killing server process with PID: 1413258
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<Learning-4802120:~$ if [[ 'true' == "true" ]]; then
>     echo "Removing all existing Cursor installations"
> 
[info] (ssh_tunnel) stdout: 
<3c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8')
> 
8>     # Don't delete the server we just copied
> 
<server-278c5cd8-c24c-4fcd-9a75-ab44b1a11f03.tar.gz"
> 
<c24c-4fcd-9a75-ab44b1a11f03.tar.gz)" -delete -print

[info] (ssh_tunnel) stdout: >     echo "Done deleting left behind cursor servers"
> fi
Removing all existing Cursor installations

[info] (ssh_tunnel) stdout: Deleting left behind cursor servers, except for /home/name/.cursor-server/cursor-server-278c5cd8-c24c-4fcd-9a75-ab44b1a11f03.tar.gz
Done deleting left behind cursor servers
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ unlock() {
>     lockfile=$(get_lockfile)
>     if [ -n "$LOCK_PID" ]; then
>         kill $LOCK_PID 2>/dev/null
>     fi
>     echo "Unlocking $lockfile"
>     rm -f "$lockfile"
>     rm -f "$lockfile.target"
> }
(base) name@ubuntu-DeepLearning-4802120:~$ 
i(base) name@ubuntu-DeepLearning-4802120:~$ lock() {
>     lockfile=$(get_lockfile)
>     echo "Locking $lockfile"
>     lockAcquired=0
 >     for i in {1..30}; do
 >         if [ -f "$lockfile" ]; then
>             # Check if lock is stale (older than 10 seconds)
>             current_time=$(date +%s)
>             lock_time=$(cat "$lockfile" 2>/dev/null || echo 0)
>             if [ $((current_time - lock_time)) -gt 10 ]; then
>                 echo "Found stale lock, removing..."
>                 rm -f "$lockfile"
>             fi
>         fi
>         touch "$lockfile.target"
>         ln "$lockfile.target" "$lockfile"
>         if [ $? -eq 0 ]; then
>             lockAcquired=1
>             # Start a background process to update timestamp
> 
< -- really bad to having processes dangling forever
>             counter=0
l >             while [ $counter -lt 900 ]; do
>                 date +%s > "$lockfile"
>                 sleep 1
t>                 counter=$((counter + 1))
>             done &
>             LOCK_PID=$!
>             break
>         fi
>         echo "Install in progress, sleeping for a bit..."
>         sleep 1
>     done
>     if [ $lockAcquired -eq 0 ]; then
> 
< 1 "Could not acquire lock after multiple attempts"
>     fi
n>     trap unlock EXIT
> }
(base) name@ubuntu-DeepLearning-4802120:~$ 
 (base) name@ubuntu-DeepLearning-4802120:~$ KERNEL="$(uname -s)"
(base) name@ubuntu-DeepLearning-4802120:~$ case $KERNEL in
>     Darwin)
>         PLATFORM="darwin"
>         ;;
>     Linux)
>         PLATFORM="linux"
>         ;;
>     FreeBSD)
>         PLATFORM="linux"
>         ;;
i>     *)
t> 
<and_exit 1 "Platform not supported: $KERNEL" "true"
>         ;;
> esac
(base) name@ubuntu-DeepLearning-4802120:~$ 
 (base) name@ubuntu-DeepLearning-4802120:~$ ARCH="$(uname -m)"
(base) name@ubuntu-DeepLearning-4802120:~$ case $ARCH in
>     x86_64 | amd64)
>         SERVER_ARCH="x64"
>         ;;
>     arm64 | aarch64)
S>         SERVER_ARCH="arm64"
>         ;;
>     *)
> 
<d_exit 1 "Architecture not supported: $ARCH" "true"
>         ;;
> esac
(base) name@ubuntu-DeepLearning-4802120:~$ 
 (base) name@ubuntu-DeepLearning-4802120:~$ 
<ase 2>/dev/null | sed 's/^ID=//gi' | sed 's/"//g')"
(base) name@ubuntu-DeepLearning-4802120:~$ 
<earning-4802120:~$ if [[ -z $OS_RELEASE_ID ]]; then
> 
<ase 2>/dev/null | sed 's/^ID=//gi' | sed 's/"//g')"
>     if [[ -z $OS_RELEASE_ID ]]; then
>         OS_RELEASE_ID="unknown"
>     fi
> fi
(base) name@ubuntu-DeepLearning-4802120:~$ 
e(base) name@ubuntu-DeepLearning-4802120:~$ 
<eepLearning-4802120:~$ # Create installation folder
(base) name@ubuntu-DeepLearning-4802120:~$ mkdir -p $SERVER_DIR
(base) name@ubuntu-DeepLearning-4802120:~$ if (( $? > 0 )); then
> 
<rror creating server install directory $SERVER_DIR"
> fi
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<alpine (musl-libc based binary) download, if needed
(base) name@ubuntu-DeepLearning-4802120:~$ 
<g-4802120:~$ if [[ $OS_RELEASE_ID = alpine ]]; then
>     PLATFORM=$OS_RELEASE_ID
> fi
(base) name@ubuntu-DeepLearning-4802120:~$ 
<m}/$PLATFORM/g" | sed "s/\${arch}/$SERVER_ARCH/g")"
(base) name@ubuntu-DeepLearning-4802120:~$ lock
Locking /run/user/2342/cursor-remote-lock.ef11e3312548c10c1b59713f964cb812
[1] 1427473
(base) name@ubuntu-DeepLearning-4802120:~$ 
<20:~$ # Check if server script is already installed
(base) name@ubuntu-DeepLearning-4802120:~$ 
<-4802120:~$ if [[ ! -f $CODE_SERVER_SCRIPT ]]; then
>     pushd $SERVER_DIR > /dev/null
> 
<server-e8062393-79b7-4980-a561-83c30696490a.tar.gz"
> 
<8c5cd8-c24c-4fcd-9a75-ab44b1a11f03.tar.gz" ]]; then
> 
<44b1a11f03.tar.gz, using it instead of downloading"
> 
<24c-4fcd-9a75-ab44b1a11f03.tar.gz" $RANDOM_FILENAME
>     else
>         if [[ 'false' == 'true' ]]; then
> 
<b44b1a11f03.tar.gz, and local download is required"
> 
<ed: Failed to copy server from local client" "true"
>         fi
>         if [[ ! -z $(which wget) ]]; then
> 
<wget from $SERVER_DOWNLOAD_URL to $RANDOM_FILENAME"
> 
<ss bar when supported (GNU Wget). Fall back if not.
>             if wget --help 2>&1 | grep -q -- '--progress='; then
>                 WGET_PROGRESS='--progress=bar:force:noscroll'
>             else
>                 WGET_PROGRESS='--progress=dot'
>             fi
> 
<T_PROGRESS -O $RANDOM_FILENAME $SERVER_DOWNLOAD_URL
>         elif [[ ! -z $(which curl) ]]; then
> 
<curl from $SERVER_DOWNLOAD_URL to $RANDOM_FILENAME"
> 
<-bar --output $RANDOM_FILENAME $SERVER_DOWNLOAD_URL
>         else
> 
< server binary. Please install wget or curl" "true"
>         fi
>         if (( $? > 0 )); then
>             if [[ "$OS_RELEASE_ID" == 'alpine' && 'false' = 'true' ]]; then
> 
<y fails, and we know that the version is pre-Alpine
> 
< download to fail if it actually would have worked!
> 
<n to connect to Alpine-based remote servers" "true"
>             fi
> 
<wnloading server from $SERVER_DOWNLOAD_URL" "false"
>         fi
>     fi
Y>     echo "Extracting server contents from $RANDOM_FILENAME"
>     tar -xf $RANDOM_FILENAME --strip-components 1
>     if (( $? > 0 )); then
> 
<ract server contents from $RANDOM_FILENAME" "false"
>     fi
>     if [[ ! -f $CODE_SERVER_SCRIPT ]]; then
> 
<ct code server script: $CODE_SERVER_SCRIPT" "false"
>     fi
>     rm -f $RANDOM_FILENAME
>     popd > /dev/null
> else
>     echo "Server script already installed in $CODE_SERVER_SCRIPT"
> fi
Downloading server via wget from https://downloads.cursor.com/production/56f0a83df8e9eb48585fcc4858a9440db4cc7771/linux/x64/cursor-reh-linux-x64.tar.gz to cursor-server-e8062393-79b7-4980-a561-83c30696490a.tar.gz
--2025-12-15 10:46:21--  https://downloads.cursor.com/production/56f0a83df8e9eb48585fcc4858a9440db4cc7771/linux/x64/cursor-reh-linux-x64.tar.gz
Resolving downloads.cursor.com (downloads.cursor.com)... 104.18.16.128, 104.18.17.128, 2606:4700::6812:1180, ...
Connecting to downloads.cursor.com (downloads.cursor.com)|104.18.16.128|:443... 
[info] (ssh_tunnel) stdout: connected.

[info] (ssh_tunnel) stdout: HTTP request sent, awaiting response... 
[info] (ssh_tunnel) stdout: 200 OK
Length: 68648615 (65M) [application/gzip]

[info] (ssh_tunnel) stdout: Saving to: ‘cursor-server-e8062393-79b7-4980-a561-83c30696490a.tar.gz’


cursor-server-e8062   0%[                    ]       0  --.-KB/s               
[info] (ssh_tunnel) stdout: 
cursor-server-e8062   0%[                    ]  41.42K   141KB/s               
[info] (ssh_tunnel) stdout: 
cursor-server-e8062   0%[                    ] 144.52K   292KB/s               
[info] (ssh_tunnel) stdout: 
cursor-server-e8062   0%[                    ] 264.00K   266KB/s               
[info] (ssh_tunnel) stdout: 
cursor-server-e8062   2%[                    ]   1.38M  1.16MB/s               
[info] (ssh_tunnel) stdout: 
cursor-server-e8062   4%[                    ]   3.08M  2.21MB/s               
[info] (ssh_tunnel) stdout: 
cursor-server-e8062   6%[>                   ]   3.96M  2.47MB/s               
[info] (ssh_tunnel) stdout: 
cursor-server-e8062   7%[>                   ]   5.21M  2.89MB/s               
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  14%[=>                  ]   9.36M  4.52MB/s               
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  18%[==>                 ]  12.34M  5.21MB/s               
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  23%[===>                ]  15.33M  5.70MB/s               
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  27%[====>               ]  18.02M  6.23MB/s               
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  27%[====>               ]  18.14M  5.68MB/s    eta 8s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  32%[=====>              ]  21.33M  6.28MB/s    eta 8s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  38%[======>             ]  25.28M  6.52MB/s    eta 8s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  43%[=======>            ]  28.31M  7.22MB/s    eta 8s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  48%[========>           ]  32.01M  8.05MB/s    eta 4s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  49%[========>           ]  32.49M  7.84MB/s    eta 4s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  54%[=========>          ]  35.75M  9.33MB/s    eta 4s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  59%[==========>         ]  39.03M  9.94MB/s    eta 4s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  61%[===========>        ]  40.21M  9.74MB/s    eta 4s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  65%[============>       ]  43.15M  10.0MB/s    eta 3s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  70%[=============>      ]  46.29M  10.1MB/s    eta 3s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  72%[=============>      ]  47.59M  9.52MB/s    eta 3s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  77%[==============>     ]  50.42M  9.85MB/s    eta 3s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  80%[===============>    ]  52.55M  9.73MB/s    eta 2s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  82%[===============>    ]  53.95M  9.52MB/s    eta 2s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  86%[================>   ]  56.82M  10.4MB/s    eta 2s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  90%[=================>  ]  59.01M  9.47MB/s    eta 2s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  91%[=================>  ]  60.16M  9.88MB/s    eta 2s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  96%[==================> ]  63.40M  9.94MB/s    eta 0s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062  97%[==================> ]  63.77M  8.71MB/s    eta 0s     
[info] (ssh_tunnel) stdout: 
cursor-server-e8062 100%[===================>]  65.47M  9.00MB/s    in 8.1s    

2025-12-15 10:46:29 (8.13 MB/s) - ‘cursor-server-e8062393-79b7-4980-a561-83c30696490a.tar.gz’ saved [68648615/68648615]

### Steps to Reproduce
Open cursor
Install `Remote-SSH (1.0.35)`
Connect via SSH







### Operating System
Windows 10/11

### Current Cursor Version (Menu -> About Cursor -> Copy)
Version: 2.1.50 (system setup)
VSCode Version: 1.105.1
Commit: 56f0a83df8e9eb48585fcc4858a9440db4cc7770
Date: 2025-12-06T23:39:52.834Z
Electron: 37.7.0
Chromium: 138.0.7204.251
Node.js: 22.20.0
V8: 13.8.258.32-electron.0
OS: Windows_NT x64 10.0.26100







### Does this stop you from using Cursor
Yes - Cursor is unusable
2025-12-15 10:46:29 (8.13 MB/s) - ‘cursor-server-e8062393-79b7-4980-a561-83c30696490a.tar.gz’ saved [68648615/68648615]


[info] (ssh_tunnel) stdout: Extracting server contents from cursor-server-e8062393-79b7-4980-a561-83c30696490a.tar.gz

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
<Learning-4802120:~$ echo "Checking node executable"
Checking node executable
(base) name@ubuntu-DeepLearning-4802120:~$ 
<120:~$ if ! $SERVER_NODE_EXECUTABLE --version; then
> 
<DE_EXECUTABLE is not working, checking system node"
>     SYSTEM_NODE=$(which node)
>     if [[ -n "$SYSTEM_NODE" ]]; then
>         echo "System node version: $($SYSTEM_NODE --version)"
> 
<(parseInt(process.version.slice(1)) >= 20 ? 0 : 1)"

[info] (ssh_tunnel) stdout: >         if [[ $? -eq 0 ]]; then
>             echo "System node version is 20 or higher, creating symlink"
>             ln -sf $SYSTEM_NODE $SERVER_NODE_EXECUTABLE
> 
<mlink from $SERVER_NODE_EXECUTABLE to $SYSTEM_NODE"
>         else
> 
<l NodeJS 20 or higher on your remote system" "true"
>         fi
>     else
> 
<l NodeJS 20 or higher on your remote system" "true"
>     fi
> fi

[info] (ssh_tunnel) stdout: v20.18.2

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
E(base) name@ubuntu-DeepLearning-4802120:~$ # Clean up stale builds

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
<ITS=$(ls -1 -t "$SERVER_DATA_DIR/bin" | tail -n +6)

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
[info] (ssh_tunnel) stdout: 
<rning-4802120:~$ for OLD_COMMIT in $OLD_COMMITS; do
> 
<_COMMIT | grep -v grep | wc -l | tr -d '[:space:]'`

[info] (ssh_tunnel) stdout: >     if [[ $IS_RUNNING -eq 0 ]]; then
>         echo "Cleaning up stale build $OLD_COMMIT"
>         if [[ "$OLD_COMMIT" != "$SERVER_COMMIT" ]]; then
> 
</bin/$OLD_COMMIT" "$SERVER_DATA_DIR/.$OLD_COMMIT.*"
>         fi
>     else
>         echo "Build $OLD_COMMIT is still running, skipping"
>     fi
> done
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
[info] (ssh_tunnel) stdout: 
<i/code -> $SERVER_DIR/bin/remote-cli/cursor (force)
(base) name@ubuntu-DeepLearning-4802120:~$ 
<2120:~$ REMOTE_CLI_DIR="$SERVER_DIR/bin/remote-cli"
(base) name@ubuntu-DeepLearning-4802120:~$ 
<arning-4802120:~$ if [ -d "$REMOTE_CLI_DIR" ]; then
>     ln -sf cursor "$REMOTE_CLI_DIR/code"
> fi
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<02120:~$ # Try to find if server is already running
(base) name@ubuntu-DeepLearning-4802120:~$ 
<running multiplex server: $MULTIPLEX_SERVER_SCRIPT"
Checking for running multiplex server: /home/name/.cursor-server/bin/multiplex-server/3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8.js
(base) name@ubuntu-DeepLearning-4802120:~$ 
[info] (ssh_tunnel) stdout: 
<2120:~$ if [[ -f $MULTIPLEX_SERVER_PIDFILE ]]; then
>     MULTIPLEX_SERVER_PID="$(cat $MULTIPLEX_SERVER_PIDFILE)"
> 
<TIPLEX_SERVER_PID | grep $MULTIPLEX_SERVER_SCRIPT)"

[info] (ssh_tunnel) stdout: > else
> 
<-A | grep $MULTIPLEX_SERVER_SCRIPT | grep -v grep)"
> fi

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
<ultiplex server: $MULTIPLEX_SERVER_RUNNING_PROCESS"

[info] (ssh_tunnel) stdout: Running multiplex server: 
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<OGFILE || ! -f $MULTIPLEX_SERVER_TOKENFILE ]]; then
>     if [[ -f $MULTIPLEX_SERVER_LOGFILE ]]; then
>         rm $MULTIPLEX_SERVER_LOGFILE
>     fi
>     if [[ -f $MULTIPLEX_SERVER_TOKENFILE ]]; then
>         rm $MULTIPLEX_SERVER_TOKENFILE
>     fi
> 
>     echo "Creating multiplex server token file $MULTIPLEX_SERVER_TOKENFILE"
>     touch $MULTIPLEX_SERVER_TOKENFILE
>     chmod 600 $MULTIPLEX_SERVER_TOKENFILE
> 
<ECTION_TOKEN="cff3754c-de82-4df6-ae34-44f359fd1d87"
>     echo $MULTIPLEX_SERVER_CONNECTION_TOKEN > $MULTIPLEX_SERVER_TOKENFILE
> 
> 
<e manually inject it into the extension host later.
> 
<s from being used across ALL connections by default
> 
>     # Backing it up, NOT exporting it
>     if [[ -n "$SSH_AUTH_SOCK" ]]; then

[info] (ssh_tunnel) stdout: >         ORIGINAL_SSH_AUTH_SOCK=$SSH_AUTH_SOCK
>         unset SSH_AUTH_SOCK
>     fi
> 
> 
<tiplex server: $(dirname $MULTIPLEX_SERVER_SCRIPT)"
>     mkdir -p $(dirname "$MULTIPLEX_SERVER_SCRIPT")
>     echo "Writing multiplex server script to $MULTIPLEX_SERVER_SCRIPT"
> 
[info] (ssh_tunnel) stdout: 
<dev/null || base64 -D) > "$MULTIPLEX_SERVER_SCRIPT"

[info] (ssh_tunnel) stdout: > 
L> 
[info] (ssh_tunnel) stdout: 
<multiplex server (or empty string for OS selection)
> 
[info] (ssh_tunnel) stdout:     MULTIPLEX_SERVER_PORT_ARG="${PORT_RANGE:-0}"
> 
 > 
<SERVER_CONNECTION_TOKEN $MULTIPLEX_SERVER_PORT_ARG"

[info] (ssh_tunnel) stdout: > 
<LEX_SERVER_PORT_ARG" &> $MULTIPLEX_SERVER_LOGFILE &
>     echo $! > $MULTIPLEX_SERVER_PIDFILE
> 
<E) and wrote pid to file $MULTIPLEX_SERVER_PIDFILE"
> 
$>     # Restoring the original SSH_AUTH_SOCK
>     if [[ -n "$ORIGINAL_SSH_AUTH_SOCK" ]]; then
>         export SSH_AUTH_SOCK=$ORIGINAL_SSH_AUTH_SOCK
>         unset ORIGINAL_SSH_AUTH_SOCK
>     fi
'> else
> 
<ng processes are $MULTIPLEX_SERVER_RUNNING_PROCESS"
> fi
Creating multiplex server token file /run/user/2342/cursor-remote-multiplex.token.ef11e3312548c10c1b59713f964cb812.3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8

[info] (ssh_tunnel) stdout: Creating directory for multiplex server: /home/name/.cursor-server/bin/multiplex-server

[info] (ssh_tunnel) stdout: Writing multiplex server script to /home/name/.cursor-server/bin/multiplex-server/3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8.js

[info] (ssh_tunnel) stdout: Starting multiplex server: /home/name/.cursor-server/bin/56f0a83df8e9eb48585fcc4858a9440db4cc7770/node /home/name/.cursor-server/bin/multiplex-server/3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8.js cff3754c-de82-4df6-ae34-44f359fd1d87 0

[info] (ssh_tunnel) stdout: [2] 1427934

[info] (ssh_tunnel) stdout: Multiplex server started with PID 1427934 and wrote pid to file /run/user/2342/cursor-remote-multiplex.pid.ef11e3312548c10c1b59713f964cb812.3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8
(base) name@ubuntu-DeepLearning-4802120:~$ 
.(base) name@ubuntu-DeepLearning-4802120:~$ 
<plex server token file $MULTIPLEX_SERVER_TOKENFILE"
Reading multiplex server token file /run/user/2342/cursor-remote-multiplex.token.ef11e3312548c10c1b59713f964cb812.3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8
(base) name@ubuntu-DeepLearning-4802120:~$ 
v(base) name@ubuntu-DeepLearning-4802120:~$ 
[info] (ssh_tunnel) stdout: 
<20:~$ if [[ -f $MULTIPLEX_SERVER_TOKENFILE ]]; then
>     echo "Multiplex server token file found"
>     MULTIPLEX_SERVER_CONNECTION_TOKEN="$(cat $MULTIPLEX_SERVER_TOKENFILE)"
> else

[info] (ssh_tunnel) stdout: > 
< token file not found: $MULTIPLEX_SERVER_TOKENFILE"
wai> fi
t
Multiplex server token file found

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<ultiplex server log file $MULTIPLEX_SERVER_LOGFILE"
Reading multiplex server log file /run/user/2342/cursor-remote-multiplex.log.ef11e3312548c10c1b59713f964cb812.3ce73d09cffc8f33c6d911e972bd0f6dabbe3e26e810844be8060e6b10987db8
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ for i in {1..180}; do
>     if [[ -f $MULTIPLEX_SERVER_LOGFILE ]]; then
> 
<listening on .+' | sed 's/Server listening on //')"
>         if [[ -n "$MULTIPLEX_LISTENING_ON" ]]; then
>             break
>         fi
>     fi
>     sleep 0.5
> done

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<2120:~$ if [[ -z "$MULTIPLEX_LISTENING_ON" ]]; then

[info] (ssh_tunnel) stdout: > 
<ver did not start successfully. Below are the logs"

[info] (ssh_tunnel) stdout: >     # Reading the logfile, to help with debugging
>     ls -al $MULTIPLEX_SERVER_LOGFILE || true
>     cat $MULTIPLEX_SERVER_LOGFILE || true
> fi
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
[info] (ssh_tunnel) stdout: 
<earning-4802120:~$ echo "Checking for code servers"
Checking for code servers
(base) name@ubuntu-DeepLearning-4802120:~$ 
<g-4802120:~$ if [[ -f $CODE_SERVER_PIDFILE ]]; then
>     CODE_SERVER_PID="$(cat $CODE_SERVER_PIDFILE)"
> 
<ep -w $CODE_SERVER_PID | grep $CODE_SERVER_SCRIPT)"

[info] (ssh_tunnel) stdout: > else
> 
<args -A | grep $CODE_SERVER_SCRIPT | grep -v grep)"
> fi

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<les exists; otherwise we need to start a new server
(base) name@ubuntu-DeepLearning-4802120:~$ 
<VER_TOKENFILE || ! -f $CODE_SERVER_LOGFILE ]]; then

[info] (ssh_tunnel) stdout: >     echo "Code server script is not running"
>     if [[ -f $CODE_SERVER_LOGFILE ]]; then
>         rm $CODE_SERVER_LOGFILE
>     fi
>     if [[ -f $CODE_SERVER_TOKENFILE ]]; then
>         rm $CODE_SERVER_TOKENFILE
>     fi
> 
>     echo "Creating code server token file $CODE_SERVER_TOKENFILE"
>     touch $CODE_SERVER_TOKENFILE
>     chmod 600 $CODE_SERVER_TOKENFILE
> 
[info] (ssh_tunnel) stdout:     CODE_SERVER_CONNECTION_TOKEN="f4b1a0f5-d7ec-4ba1-b302-d4fdc80bd773"
>     echo $CODE_SERVER_CONNECTION_TOKEN > $CODE_SERVER_TOKENFILE
> 
> 
<e manually inject it into the extension host later.
> 
<s from being used across ALL connections by default
> 
>     # Backing it up, NOT exporting it
>     if [[ -n "$SSH_AUTH_SOCK" ]]; then
>         ORIGINAL_SSH_AUTH_SOCK=$SSH_AUTH_SOCK
>         unset SSH_AUTH_SOCK
>     fi
> 
>     # Pass the port range directly to code server (or 0 for OS selection)
>     CODE_SERVER_PORT_ARG="${PORT_RANGE:-0}"
> 
> 
<ept-server-license-terms &> $CODE_SERVER_LOGFILE &"
> 
> 
<cept-server-license-terms &> $CODE_SERVER_LOGFILE &
>     echo $! > $CODE_SERVER_PIDFILE
> 
<IDFILE) and wrote pid to file $CODE_SERVER_PIDFILE"
> 
>     # Restoring the original SSH_AUTH_SOCK
>     if [[ -n "$ORIGINAL_SSH_AUTH_SOCK" ]]; then
>         export SSH_AUTH_SOCK=$ORIGINAL_SSH_AUTH_SOCK
>         unset ORIGINAL_SSH_AUTH_SOCK
>     fi
> else
> 
<Running processes are $CODE_SERVER_RUNNING_PROCESS"
> fi
Code server script is not running
Creating code server token file /run/user/2342/cursor-remote-code.token.ef11e3312548c10c1b59713f964cb812
Starting code server script /home/name/.cursor-server/bin/56f0a83df8e9eb48585fcc4858a9440db4cc7770/bin/cursor-server --start-server --host=127.0.0.1 --port 0  --connection-token-file /run/user/2342/cursor-remote-code.token.ef11e3312548c10c1b59713f964cb812 --telemetry-level off --enable-remote-auto-shutdown --accept-server-license-terms &> /run/user/2342/cursor-remote-code.log.ef11e3312548c10c1b59713f964cb812 &
[3] 1427977
Code server started with PID 1427977 and wrote pid to file /run/user/2342/cursor-remote-code.pid.ef11e3312548c10c1b59713f964cb812
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<4802120:~$ if [[ -f $CODE_SERVER_TOKENFILE ]]; then
>     CODE_SERVER_CONNECTION_TOKEN="$(cat $CODE_SERVER_TOKENFILE)"
> else
> 
<erver token file not found: $CODE_SERVER_TOKENFILE"
> fi
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<echo "Code server log file is $CODE_SERVER_LOGFILE"
Code server log file is /run/user/2342/cursor-remote-code.log.ef11e3312548c10c1b59713f964cb812
(base) name@ubuntu-DeepLearning-4802120:~$ for i in {1..180}; do
>     if [[ -f $CODE_SERVER_LOGFILE ]]; then
> 
<+' | sed 's/Extension host agent listening on //')"
>         if [[ -n "$CODE_LISTENING_ON" ]]; then
>             break
>         fi
>     fi
>     sleep 0.5
> done

[info] (ssh_tunnel) stdout: (base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<g-4802120:~$ if [[ -z "$CODE_LISTENING_ON" ]]; then
> 
[info] (ssh_tunnel) stdout:     echo "Error code server did not start successfully"
>     # Reading the logfile, to help with debugging
>     ls -al $CODE_SERVER_LOGFILE || true
> 
[info] (ssh_tunnel) stdout:     cat $CODE_SERVER_LOGFILE || true
> 
< 1 "Code server did not start successfully" "false"
> fi
(base) name@ubuntu-DeepLearning-4802120:~$ 
(base) name@ubuntu-DeepLearning-4802120:~$ 
<pLearning-4802120:~$ print_install_results_and_wait

[info] (ssh_tunnel) stdout: 56284375419e16563f0b7b1c: start
exitCode==0==
nodeExecutable==/home/name/.cursor-server/bin/56f0a83df8e9eb48585fcc4858a9440db4cc7770/node==
errorMessage====
isFatalError==false==
multiplexListeningOn==45363==
multiplexConnectionToken==cff3754c-de82-4df6-ae34-44f359fd1d87==
codeListeningOn==33911==
codeConnectionToken==f4b1a0f5-d7ec-4ba1-b302-d4fdc80bd773==
detectedPlatform==linux==
arch==x64==
SSH_AUTH_SOCK====
56284375419e16563f0b7b1c: end

[info] (ssh_tunnel) stdout: Unlocking /run/user/2342/cursor-remote-lock.ef11e3312548c10c1b59713f964cb812

[info] (ssh_tunnel) stdout: [1]   Terminated              while [ $counter -lt 900 ]; do
    date +%s > "$lockfile"; sleep 1; counter=$((counter + 1));
done

[info] (ssh_tunnel) stdout:  
***********************************************************************
* 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.                                      *
***********************************************************************

[info] (ssh_tunnel) stdout: [2]-  Done                    $SERVER_NODE_EXECUTABLE "$MULTIPLEX_SERVER_SCRIPT" "$MULTIPLEX_SERVER_CONNECTION_TOKEN" "$MULTIPLEX_SERVER_PORT_ARG" &> $MULTIPLEX_SERVER_LOGFILE
[3]+  Done                    $CODE_SERVER_SCRIPT --start-server --host=127.0.0.1 --port $CODE_SERVER_PORT_ARG --connection-token-file $CODE_SERVER_TOKENFILE --telemetry-level off --enable-remote-auto-shutdown --accept-server-license-terms &> $CODE_SERVER_LOGFILE
Code server process 1427977 died
Multiplex server process 1427934 died
exit


I meet the same problem. Are there any solutions?

Thanks for reporting - I’ve raised this with the extensions team.

It looks like you’re connecting through JumpServer (bastion host). If possible, testing a direct SSH connection to the target machine would help confirm whether the issue is specific to the JumpServer environment.