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