How to download cursor remote-ssh server manually?

After the recent upgrade of Cursor, the Remote-SSH plugin is unable to enable. The issue seems to occur during the download of the Remote-SSH server, where there is no response. Below are the logs:

[10:46:32.120] [server] Checking /home/users/shiwei01.yang/.cursor-server/cli/servers/Stable-48d735e3dec42accfdf71efabf00bb49e242b880/log.txt and /home/users/shiwei01.yang/.cursor-server/cli/servers/Stable-48d735e3dec42accfdf71efabf00bb49e242b880/pid.txt for a running server...
[10:46:35.484] [server] Installing and setting up Cursor Server...

My SSH machines cannot access external networks, and I suspect this might be the reason. However, previous upgrades worked perfectly without issues.

Is there a way to manually download and install the necessary components to resolve this issue?

Enviroments

version: 0.43.4
commit: 1.93.1
date: 48d735e3dec42accfdf71efabf00bb49e242b880
Electron: 2024-11-26T00:13:53.586Z
ElectronBuildId: 30.5.1
Chromium: undefined
Node.js: 124.0.6367.243
V8: 20.16.0
OS: 12.4.254.20-electron.0

same question, the cusor-server folder structure is different with vscode-server, I have no idea about how to install the update manually

I am also facing the same issue,

[13:10:14.362] Got request to download on client for {"artifact":"cli-linux-armhf","destPath":"/home/iotuser/.cursor-server/vscode-cli-cce0110ca40ceb61e76ecea08d24210123895320.tar.gz"}

[13:10:14.363] server download URL: https://cursor.blob.core.windows.net/remote-releases/cce0110ca40ceb61e76ecea08d24210123895320/cli-linux-armhf.tar.gz

[13:10:14.363] Downloading VS Code server locally...

[13:10:14.382] >

>

[13:10:14.656] Resolver error: Error: Failed to download VS Code Server (Server returned 404)

Hey, I’m not sure if the Remote SSH server supports ARMHF Linux distributions right now!

This could just be that the wrong version is installed in Cursor, so try removing the Remote SSH extensions, and downloading either Open Remote SSH, or Remote SSH, whichever you find first!

Any update for this problem?

In the recent updates across multiple versions, I have not encountered the issue anymore. The machine I originally couldn’t download from was not allowed to connect to external networks. Therefore, I found a Linux machine that could connect to external networks, connected to Cursor, and then copied the relevant content to my target machine to resolve the problem.

I would prefer if the official team could provide a place to manually download the corresponding version components.

I made a script to upload the Cursor server to offline Linux servers. I use m1 mac.

#!/bin/bash

# =========================================================
# Cursor Remote Server Update Script
# Used to download Cursor server files locally and then upload them to a remote Linux server
# =========================================================

# ==================== Local Configuration ====================
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
LOCAL_DOWNLOAD_DIR="$SCRIPT_DIR/cursor_downloads" # Local download directory

# Remote server configuration
REMOTE_PORT=22 # SSH port
REMOTE_USER="root" # Remote username
REMOTE_HOST="mycloud.com" # Remote host

# ==================== Target Architecture Configuration ====================
# Local architecture - determines which version you want to download locally
# Possible values: "x64" or "arm64"
# - x64: For Intel-based Macs
# - arm64: For Apple Silicon (M1/M2/M3) based Macs
LOCAL_ARCH="arm64"

# Remote architecture - determines which version you want to use on the remote server
# Possible values: "x64" or "arm64"
# - x64: For Intel/AMD servers (most common)
# - arm64: For ARM-based servers (e.g., AWS Graviton)
REMOTE_ARCH="x64"

# Remote operating system - usually Linux
# Possible values: "linux"
# Note: Cursor server currently mainly supports Linux
REMOTE_OS="linux"

# ==================== Script Functions ====================

# Output colored messages
print_message() {
    local color=$1
    local message=$2

    case $color in
        "green") echo -e "\033[0;32m$message\033[0m" ;;
        "red") echo -e "\033[0;31m$message\033[0m" ;;
        "yellow") echo -e "\033[0;33m$message\033[0m" ;;
        "blue") echo -e "\033[0;34m$message\033[0m" ;;
        *) echo "$message" ;;
    esac
}

# Check if a command exists
check_command() {
    if ! command -v $1 &> /dev/null; then
        print_message "red" "Error: Command '$1' not found, please install it first."
        exit 1
    fi
}

# Get Cursor version information
get_cursor_version() {
    if ! command -v cursor &> /dev/null; then
        print_message "red" "Error: 'cursor' command not found. Please ensure Cursor is installed."
        exit 1
    fi

    print_message "blue" "Fetching Cursor version information..."

    # Run cursor --version and capture the output
    local version_info=$(cursor --version)

    # Use regex to extract version, commit hash, and architecture
    CURSOR_VERSION=$(echo "$version_info" | sed -n '1p')
    CURSOR_COMMIT=$(echo "$version_info" | sed -n '2p')
    CURSOR_ARCH=$(echo "$version_info" | sed -n '3p')

    print_message "green" "Retrieved Cursor information:"
    print_message "green" "  Version: $CURSOR_VERSION"
    print_message "green" "  Commit: $CURSOR_COMMIT"
    print_message "green" "  Architecture: $CURSOR_ARCH"
}

# Download Cursor server
download_cursor_server() {
    print_message "blue" "Preparing to download Cursor server..."

    # Create download directory
    mkdir -p "$LOCAL_DOWNLOAD_DIR"

    # Build download URL
    DOWNLOAD_URL="https://cursor.blob.core.windows.net/remote-releases/${CURSOR_VERSION}-${CURSOR_COMMIT}/vscode-reh-${REMOTE_OS}-${REMOTE_ARCH}.tar.gz"

    # Set download filename
    DOWNLOAD_FILENAME="cursor-server-${CURSOR_VERSION}-${CURSOR_COMMIT}-${REMOTE_OS}-${REMOTE_ARCH}.tar.gz"
    DOWNLOAD_PATH="$LOCAL_DOWNLOAD_DIR/$DOWNLOAD_FILENAME"

    print_message "yellow" "Download URL: $DOWNLOAD_URL"
    print_message "yellow" "Downloading to: $DOWNLOAD_PATH"

    # Download the file
    if curl -L "$DOWNLOAD_URL" -o "$DOWNLOAD_PATH"; then
        print_message "green" "Cursor server downloaded successfully!"
    else
        print_message "red" "Download failed!"
        exit 1
    fi
}

# Upload and deploy Cursor server to remote host
deploy_to_remote() {
    print_message "blue" "Preparing to upload to remote server..."

    # Build SSH command prefix
    SSH_CMD="ssh -p $REMOTE_PORT ${REMOTE_USER}@${REMOTE_HOST}"
    SCP_CMD="scp -P $REMOTE_PORT"

    # Ensure remote directory exists
    print_message "yellow" "Creating remote directory structure..."
    $SSH_CMD "mkdir -p ~/.cursor-server/cli/servers/Stable-${CURSOR_COMMIT}/server/"

    # Upload the file
    print_message "yellow" "Uploading server files to remote host..."
    $SCP_CMD "$DOWNLOAD_PATH" "${REMOTE_USER}@${REMOTE_HOST}:~/.cursor-server/cursor-server.tar.gz"

    if [ $? -ne 0 ]; then
        print_message "red" "Upload failed!"
        exit 1
    fi

    # Extract the file
    print_message "yellow" "Extracting files on remote host..."
    $SSH_CMD "tar -xzf ~/.cursor-server/cursor-server.tar.gz -C ~/.cursor-server/cli/servers/Stable-${CURSOR_COMMIT}/server/ --strip-components=1"

    if [ $? -ne 0 ]; then
        print_message "red" "Extraction failed!"
        exit 1
    fi

    # Clean up temporary files
    print_message "yellow" "Cleaning up remote temporary files..."
    $SSH_CMD "rm ~/.cursor-server/cursor-server.tar.gz"

    print_message "green" "Deployment complete! Server files have been successfully installed on the remote host."
    print_message "green" "Remote server path: ~/.cursor-server/cli/servers/Stable-${CURSOR_COMMIT}/server/"
}

# ==================== Main Program ====================

# Check necessary commands
check_command "curl"
check_command "ssh"
check_command "scp"

# Get Cursor version information
get_cursor_version

# Download Cursor server
download_cursor_server

# Confirm upload
print_message "blue" "Preparing to upload to remote server ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PORT}"
print_message "yellow" "Continue? [y/N]: "
read -r confirmation

if [[ $confirmation =~ ^[Yy]$ ]]; then
    deploy_to_remote
else
    print_message "yellow" "Upload canceled. Files have been downloaded locally: $DOWNLOAD_PATH"
fi

print_message "green" "Script execution complete!"
4 Likes

Thank you ! It is just what I want

Thx, that really helps a lot!