Skip to content

Issue connecting to remote server via SSH - "Couldn't get identities from OpenSSH agent" and server installation failure #6891

Description

@Cartman771

I am encountering issues when trying to SSH into a remote server using Positron. The connection fails, even though the same configuration works fine with VS Code. Below are the error logs:

[Info - 14:00:38.614] Resolving ssh remote authority 'ssh-remote+218.205.27.74' (attemp #1)
[Error - 14:00:38.623] Couldn't get identities from OpenSSH agent
Error: Failed to connect to agent
at Socket.r (d:\Software\Positron\Positron\resources\app\extensions\open-remote-ssh\dist\extension.js:1:132086)
at Socket.emit (node:events:518:28)
at Socket.emit (node:domain:489:12)
at emitErrorNT (node:internal/streams/destroy:169:8)
at emitErrorCloseNT (node:internal/streams/destroy:128:3)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
[Trace - 14:00:38.624] Identity keys:
None
[Info - 14:00:39.45] Trying no-auth authentication
[Info - 14:00:39.213] Trying password authentication
[Trace - 14:00:42.471] Server install command:

Server installation script

TMP_DIR="${XDG_RUNTIME_DIR:-"/tmp"}"

DISTRO_VERSION="2025.03.0-116"
DISTRO_COMMIT="7f0f93873e8b24c9f393bb3586724f4783c5e72c"
DISTRO_QUALITY="undefined"
DISTRO_VSCODIUM_RELEASE=""

SERVER_APP_NAME="positron-server"
SERVER_INITIAL_EXTENSIONS=""
SERVER_LISTEN_FLAG="--port=0"
SERVER_DATA_DIR="$HOME/.positron-server"
SERVER_DIR="$SERVER_DATA_DIR/bin/$DISTRO_COMMIT"
SERVER_SCRIPT="$SERVER_DIR/bin/$SERVER_APP_NAME"
SERVER_LOGFILE="$SERVER_DATA_DIR/.$DISTRO_COMMIT.log"
SERVER_PIDFILE="$SERVER_DATA_DIR/.$DISTRO_COMMIT.pid"
SERVER_TOKENFILE="$SERVER_DATA_DIR/.$DISTRO_COMMIT.token"
SERVER_ARCH=
SERVER_CONNECTION_TOKEN=
SERVER_DOWNLOAD_URL=

LISTENING_ON=
OS_RELEASE_ID=
ARCH=
PLATFORM=

Mimic output from logs of remote-ssh extension

print_install_results_and_exit() {
echo "d8cd16d213ea6b8c328fa763: start"
echo "exitCode==$1=="
echo "listeningOn==$LISTENING_ON=="
echo "connectionToken==$SERVER_CONNECTION_TOKEN=="
echo "logFile==$SERVER_LOGFILE=="
echo "osReleaseId==$OS_RELEASE_ID=="
echo "arch==$ARCH=="
echo "platform==$PLATFORM=="
echo "tmpDir==$TMP_DIR=="

echo "d8cd16d213ea6b8c328fa763: end"
exit 0

}

Check if platform is supported

KERNEL="$(uname -s)"
case $KERNEL in
Darwin)
PLATFORM="darwin"
;;
Linux)
PLATFORM="linux"
;;
FreeBSD)
PLATFORM="freebsd"
;;
DragonFly)
PLATFORM="dragonfly"
;;
*)
echo "Error platform not supported: $KERNEL"
print_install_results_and_exit 1
;;
esac

Check machine architecture

ARCH="$(uname -m)"
case $ARCH in
x86_64 | amd64)
SERVER_ARCH="x64"
;;
armv7l | armv8l)
SERVER_ARCH="armhf"
;;
arm64 | aarch64)
SERVER_ARCH="arm64"
;;
ppc64le)
SERVER_ARCH="ppc64le"
;;
riscv64)
SERVER_ARCH="riscv64"
;;
*)
echo "Error architecture not supported: $ARCH"
print_install_results_and_exit 1
;;
esac

https://www.freedesktop.org/software/systemd/man/os-release.html

OS_RELEASE_ID="$(grep -i '^ID=' /etc/os-release 2>/dev/null | sed 's/^ID=//gi' | sed 's/"//g')"
if [[ -z $OS_RELEASE_ID ]]; then
OS_RELEASE_ID="$(grep -i '^ID=' /usr/lib/os-release 2>/dev/null | sed 's/^ID=//gi' | sed 's/"//g')"
if [[ -z $OS_RELEASE_ID ]]; then
OS_RELEASE_ID="unknown"
fi
fi

Create installation folder

if [[ ! -d $SERVER_DIR ]]; then
mkdir -p $SERVER_DIR
if (( $? > 0 )); then
echo "Error creating server install directory"
print_install_results_and_exit 1
fi
fi

SERVER_DOWNLOAD_URL="$(echo "https://github.com/posit-dev/positron/releases/download/\${version}/positron-reh-\${os}-\${arch}-\${version}.tar.gz" | sed "s/${quality}/$DISTRO_QUALITY/g" | sed "s/${version}/$DISTRO_VERSION/g" | sed "s/${commit}/$DISTRO_COMMIT/g" | sed "s/${os}/$PLATFORM/g" | sed "s/${arch}/$SERVER_ARCH/g" | sed "s/${release}/$DISTRO_VSCODIUM_RELEASE/g")"

Check if server script is already installed

if [[ ! -f $SERVER_SCRIPT ]]; then
if [[ "$PLATFORM" != "darwin" ]] && [[ "$PLATFORM" != "linux" ]]; then
echo "Error "$PLATFORM" needs manual installation of remote extension host"
print_install_results_and_exit 1
fi

pushd $SERVER_DIR > /dev/null

if [[ ! -z $(which wget) ]]; then
    wget --tries=3 --timeout=10 --continue --no-verbose -O vscode-server.tar.gz $SERVER_DOWNLOAD_URL
elif [[ ! -z $(which curl) ]]; then
    curl --retry 3 --connect-timeout 10 --location --show-error --silent --output vscode-server.tar.gz $SERVER_DOWNLOAD_URL
else
    echo "Error no tool to download server binary"
    print_install_results_and_exit 1
fi

if (( $? > 0 )); then
    echo "Error downloading server from $SERVER_DOWNLOAD_URL"
    print_install_results_and_exit 1
fi

tar -xf vscode-server.tar.gz --strip-components 1
if (( $? > 0 )); then
    echo "Error while extracting server contents"
    print_install_results_and_exit 1
fi

if [[ ! -f $SERVER_SCRIPT ]]; then
    echo "Error server contents are corrupted"
    print_install_results_and_exit 1
fi

rm -f vscode-server.tar.gz

popd > /dev/null

else
echo "Server script already installed in $SERVER_SCRIPT"
fi

Try to find if server is already running

if [[ -f $SERVER_PIDFILE ]]; then
SERVER_PID="$(cat $SERVER_PIDFILE)"
SERVER_RUNNING_PROCESS="$(ps -o pid,args -p $SERVER_PID | grep $SERVER_SCRIPT)"
else
SERVER_RUNNING_PROCESS="$(ps -o pid,args -A | grep $SERVER_SCRIPT | grep -v grep)"
fi

if [[ -z $SERVER_RUNNING_PROCESS ]]; then
if [[ -f $SERVER_LOGFILE ]]; then
rm $SERVER_LOGFILE
fi
if [[ -f $SERVER_TOKENFILE ]]; then
rm $SERVER_TOKENFILE
fi

touch $SERVER_TOKENFILE
chmod 600 $SERVER_TOKENFILE
SERVER_CONNECTION_TOKEN="cdea68aa-87c6-4249-a24b-dac6f15a77ea"
echo $SERVER_CONNECTION_TOKEN > $SERVER_TOKENFILE

$SERVER_SCRIPT --start-server --host=127.0.0.1 $SERVER_LISTEN_FLAG $SERVER_INITIAL_EXTENSIONS --connection-token-file $SERVER_TOKENFILE --telemetry-level off --enable-remote-auto-shutdown --accept-server-license-terms &> $SERVER_LOGFILE &
echo $! > $SERVER_PIDFILE

else
echo "Server script is already running $SERVER_SCRIPT"
fi

if [[ -f $SERVER_TOKENFILE ]]; then
SERVER_CONNECTION_TOKEN="$(cat $SERVER_TOKENFILE)"
else
echo "Error server token file not found $SERVER_TOKENFILE"
print_install_results_and_exit 1
fi

if [[ -f $SERVER_LOGFILE ]]; then
for i in {1..5}; do
LISTENING_ON="$(cat $SERVER_LOGFILE | grep -E 'Extension host agent listening on .+' | sed 's/Extension host agent listening on //')"
if [[ -n $LISTENING_ON ]]; then
break
fi
sleep 0.5
done

if [[ -z $LISTENING_ON ]]; then
    echo "Error server did not start sucessfully"
    print_install_results_and_exit 1
fi

else
echo "Error server log file not found $SERVER_LOGFILE"
print_install_results_and_exit 1
fi

Finish server setup

print_install_results_and_exit 0

[Trace - 14:01:15.814] Server install command stderr:

[Trace - 14:01:15.814] Server install command stdout:
Error downloading server from https://github.com/posit-dev/positron/releases/download/2025.03.0-116/positron-reh-linux-x64-2025.03.0-116.tar.gz
d8cd16d213ea6b8c328fa763: start
exitCode==1==
listeningOn====
connectionToken====
logFile==/media/desk16/tly124/.positron-server/.7f0f93873e8b24c9f393bb3586724f4783c5e72c.log==
osReleaseId==ubuntu==
arch==x86_64==
platform==linux==
tmpDir==/run/user/1002==
d8cd16d213ea6b8c328fa763: end

[Error - 14:01:15.815] Error resolving authority
Error: Couldn't install vscode server on remote server, install script returned non-zero exit status
at e.installCodeServer (d:\Software\Positron\Positron\resources\app\extensions\open-remote-ssh\dist\extension.js:1:439488)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async d:\Software\Positron\Positron\resources\app\extensions\open-remote-ssh\dist\extension.js:1:403242

Key observations:

Metadata

Metadata

Assignees

No one assigned

    Labels

    info neededWaiting on information

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions