Signatur
Beschreibung
ssh2_auth_pubkey() ermöglicht die Public-Key-Authentifizierung gegenüber einem SSH2-Server, wobei der öffentliche und der private Schlüssel nicht als Dateipfade, sondern direkt als Zeichenketten (Variablen) übergeben werden. Dies ist nützlich, wenn die Schlüssel z. B. aus einer Datenbank, einem Secret-Management-System oder einer anderen Laufzeit-Quelle stammen und nicht zwingend auf dem Dateisystem abgelegt werden sollen.
Im Gegensatz zu ssh2_auth_pubkey_file(), das Dateipfade erwartet, erlaubt diese Funktion einen flexibleren Umgang mit Schlüsselmaterial – etwa in Container-Umgebungen oder CI/CD-Pipelines, in denen das Dateisystem nicht persistent ist.
Der private Schlüssel kann optional mit einer Passphrase geschützt sein, die als letzter Parameter übergeben wird. Die Funktion gibt true zurück, wenn die Authentifizierung erfolgreich war, andernfalls false.
Voraussetzung ist eine zuvor über ssh2_connect() hergestellte SSH2-Verbindung. Die Funktion steht nur zur Verfügung, wenn PHP mit der ssh2-Erweiterung (PECL) kompiliert wurde.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $session Pflicht | resource | Eine SSH2-Verbindungsressource, wie sie von ssh2_connect() zurückgegeben wird. |
|
| $username Pflicht | string | Der Benutzername, mit dem die Authentifizierung auf dem SSH2-Server durchgeführt werden soll. | |
| $pubkeydata Pflicht | string | Der öffentliche Schlüssel als Zeichenkette im OpenSSH-Format (z. B. Inhalt einer id_rsa.pub-Datei), ohne die Kopfzeile ssh-rsa – nur der Base64-kodierte Schlüsselkörper. |
|
| $privkeydata Pflicht | string | Der private Schlüssel als Zeichenkette im PEM-Format (z. B. Inhalt einer id_rsa-Datei). |
|
| $passphrase | string | Optionale Passphrase zum Entschlüsseln des privaten Schlüssels, falls dieser passwortgeschützt ist. |
Rückgabewert
true zurück, wenn die Authentifizierung erfolgreich war. Bei einem Fehler (falsche Schlüssel, falscher Benutzername, fehlgeschlagene Authentifizierung) wird false zurückgegeben.Beispiele
SSH2-Authentifizierung mit Schlüsseln aus Variablen
<?php
// Schlüssel z. B. aus einer Umgebungsvariable oder einem Secret Store laden
$pubkeydata = getenv('SSH_PUBLIC_KEY'); // Base64-kodierter Schlüsselkörper
$privkeydata = getenv('SSH_PRIVATE_KEY'); // PEM-kodierter privater Schlüssel
// SSH2-Verbindung herstellen
$session = ssh2_connect('example.com', 22);
if ($session === false) {
die('Verbindung fehlgeschlagen.');
}
// Authentifizierung mit Public-Key aus Variablen
$result = ssh2_auth_pubkey(
$session,
'deploy',
$pubkeydata,
$privkeydata
);
if ($result) {
echo 'Authentifizierung erfolgreich!';
} else {
echo 'Authentifizierung fehlgeschlagen.';
}
Authentifizierung mit passwortgeschütztem privaten Schlüssel
<?php
$pubkeydata = file_get_contents('/run/secrets/id_rsa.pub.data'); // Nur Base64-Body
$privkeydata = file_get_contents('/run/secrets/id_rsa');
$passphrase = getenv('SSH_KEY_PASSPHRASE');
$session = ssh2_connect('secure.example.com', 22);
if ($session === false) {
die('Verbindung konnte nicht hergestellt werden.');
}
if (ssh2_auth_pubkey($session, 'admin', $pubkeydata, $privkeydata, $passphrase)) {
echo 'Login erfolgreich – Befehle können ausgeführt werden.';
$stream = ssh2_exec($session, 'uptime');
stream_set_blocking($stream, true);
echo stream_get_contents($stream);
} else {
echo 'Authentifizierung fehlgeschlagen.';
}
// Wichtig · Fallstricke
Sicherheitshinweis: Private Schlüssel sollten niemals im Quellcode fest kodiert werden. Nutzen Sie stattdessen Umgebungsvariablen, Secret-Management-Systeme (z. B. HashiCorp Vault, AWS Secrets Manager) oder sichere Konfigurationsdateien mit eingeschränkten Dateisystemrechten.
Schlüsselformat: Der Parameter pubkeydata erwartet nur den reinen Base64-kodierten Schlüsselkörper, nicht den kompletten OpenSSH-Zeileninhalt (also ohne das Präfix wie ssh-rsa und ohne den abschließenden Kommentar). Dies unterscheidet sich vom Dateiinhalt von id_rsa.pub.
Verfügbarkeit: Diese Funktion ist Teil der ssh2-PECL-Erweiterung und nicht im PHP-Kern enthalten. Sie muss separat installiert werden (pecl install ssh2). Unter Debian/Ubuntu: apt install php-ssh2.
Alternativ kann ssh2_auth_pubkey_file() verwendet werden, wenn die Schlüssel als Dateipfade vorliegen.