Start · Sprachen · PHP · Referenz · ssh2_publickey_init

ssh2_publickey_init

Funktion

Initialisiert das Publickey-Subsystem einer bestehenden SSH2-Verbindung und gibt eine Ressource für Public-Key-Operationen zurück.

Kategorie: http

Signatur

ssh2_publickey_init(resource $session): resource|false

Beschreibung

Mit ssh2_publickey_init() wird das Publickey-Subsystem für eine bereits authentifizierte SSH2-Verbindung gestartet. Es handelt sich dabei um eine Erweiterung des SSH2-Protokolls, die es erlaubt, öffentliche Schlüssel auf dem entfernten Server zu verwalten – also hinzuzufügen, zu entfernen und aufzulisten.

Die Funktion gibt eine spezielle Publickey-Subsystem-Ressource zurück, die anschließend an Funktionen wie ssh2_publickey_add(), ssh2_publickey_remove() und ssh2_publickey_list() übergeben wird. Ohne diesen initialen Aufruf stehen diese Operationen nicht zur Verfügung.

Wichtig: Der SSH2-Server muss das Publickey-Subsystem explizit unterstützen und aktiviert haben (z. B. authorized_keys-Verwaltung über das Protokoll). Dies ist nicht auf allen Servern standardmäßig der Fall. Die Funktion setzt außerdem voraus, dass die PHP-Erweiterung ssh2 (PECL) installiert ist.

Typische Anwendungsfälle sind automatisierte Serverkonfigurationsskripte, Deployment-Systeme oder Admin-Tools, die öffentliche Schlüssel programmatisch auf Remote-Hosts verwalten müssen.

Parameter

Name Typ Default Beschreibung
$session Pflicht resource Eine aktive SSH2-Verbindungsressource, wie sie von ssh2_connect() zurückgegeben und anschließend authentifiziert wurde (z. B. via ssh2_auth_pubkey_file() oder ssh2_auth_password()).

Rückgabewert

Typ
resource|false
Beschreibung
Gibt eine Publickey-Subsystem-Ressource zurück, die für nachfolgende Public-Key-Operationen benötigt wird. Schlägt die Initialisierung fehl (z. B. weil der Server das Subsystem nicht unterstützt), wird false zurückgegeben.

Beispiele

Verbindung aufbauen und Publickey-Subsystem initialisieren

<?php
// SSH2-Verbindung herstellen
$session = ssh2_connect('example.com', 22);
if ($session === false) {
    die('Verbindung fehlgeschlagen.');
}

// Authentifizierung mit Benutzername und Passwort
if (!ssh2_auth_password($session, 'adminuser', 'geheimesPasswort')) {
    die('Authentifizierung fehlgeschlagen.');
}

// Publickey-Subsystem initialisieren
$pkey = ssh2_publickey_init($session);
if ($pkey === false) {
    die('Publickey-Subsystem konnte nicht initialisiert werden.');
}

echo 'Publickey-Subsystem erfolgreich initialisiert.' . PHP_EOL;

// Beispiel: Vorhandene Public Keys auflisten
$keys = ssh2_publickey_list($pkey);
foreach ($keys as $key) {
    echo 'Algorithmus: ' . $key['name'] . ', Blob-Länge: ' . strlen($key['blob']) . PHP_EOL;
}
?>
Publickey-Subsystem erfolgreich initialisiert. Algorithmus: ssh-rsa, Blob-Länge: 279

Öffentlichen Schlüssel hinzufügen und entfernen

<?php
$session = ssh2_connect('example.com', 22);
ssh2_auth_pubkey_file(
    $session,
    'adminuser',
    '/home/adminuser/.ssh/id_rsa.pub',
    '/home/adminuser/.ssh/id_rsa'
);

$pkey = ssh2_publickey_init($session);
if ($pkey === false) {
    die('Publickey-Subsystem nicht verfügbar.');
}

// Öffentlichen RSA-Schlüssel hinzufügen (Blob aus Datei lesen)
$pubkeyBlob = base64_decode(explode(' ', file_get_contents('/tmp/neuer_schluessel.pub'))[1]);
ssh2_publickey_add($pkey, 'ssh-rsa', $pubkeyBlob, false, ['comment' => 'DeployKey']);
echo 'Schlüssel hinzugefügt.' . PHP_EOL;

// Schlüssel wieder entfernen
ssh2_publickey_remove($pkey, 'ssh-rsa', $pubkeyBlob);
echo 'Schlüssel entfernt.' . PHP_EOL;
?>
Schlüssel hinzugefügt. Schlüssel entfernt.

// Wichtig · Fallstricke

Voraussetzungen: Die PECL-Erweiterung ssh2 muss installiert sein (pecl install ssh2). Das Publickey-Subsystem ist nicht Bestandteil des Standard-SSH2-Protokolls und wird nicht von allen SSH-Servern unterstützt. OpenSSH unterstützt es in der Regel nicht ohne zusätzliche Konfiguration oder Patches.

Sicherheitshinweis: Beim Hinzufügen von Public Keys über dieses Subsystem werden autorisierte Schlüssel auf dem Remote-System verändert. Stellen Sie sicher, dass nur vertrauenswürdige, geprüfte Schlüssel hinzugefügt werden, um unerlaubten Zugriff zu verhindern. Credentials für die Verbindung sollten niemals im Klartext im Quellcode gespeichert werden.

Da diese Funktion zur PECL-Erweiterung ssh2 gehört, kann sich ihr Verhalten je nach installierter Version unterscheiden. Prüfen Sie mit phpinfo() oder extension_loaded('ssh2'), ob die Erweiterung korrekt geladen ist.