Signatur
Beschreibung
ssh2_publickey_list() gibt eine Liste aller Public Keys zurück, die auf dem Remote-Server für den authentifizierten Benutzer autorisiert sind. Die Funktion gehört zur PECL-Erweiterung ssh2 und ist Teil des Subsystems zur Public-Key-Verwaltung, das auf dem SSH2-Protokoll basiert.
Um diese Funktion nutzen zu können, muss zunächst eine SSH2-Verbindung via ssh2_connect() hergestellt und anschließend eine Public-Key-Subsystem-Ressource mit ssh2_publickey_init() erzeugt werden. Diese Ressource wird als Parameter übergeben.
Die Funktion liefert ein Array von assoziativen Arrays, wobei jeder Eintrag Informationen zu einem Public Key enthält, darunter den Algorithmus (name), den Schlüssel selbst (blob) sowie optionale Attribute (attrs). Sie eignet sich besonders für Verwaltungsanwendungen, die programmatisch den Autorisierungsstatus von SSH-Schlüsseln abfragen oder synchronisieren müssen.
Hinweis: Diese Funktion erfordert die PECL-Erweiterung ssh2 und einen SSH-Server, der das publickey-Subsystem unterstützt. Sie ist nicht in der PHP-Standardinstallation enthalten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $pkey Pflicht | resource | Eine Public-Key-Subsystem-Ressource, die zuvor mit ssh2_publickey_init() erzeugt wurde. |
Rückgabewert
name (Algorithmus-Name, z. B. ssh-rsa), blob (der rohe Schlüssel als Binärstring) und attrs (ein Array optionaler Attribute). Im Fehlerfall wird false zurückgegeben.Beispiele
Autorisierte Public Keys auflisten
<?php
// SSH-Verbindung herstellen
$connection = ssh2_connect('example.com', 22);
if (!$connection) {
die('Verbindung fehlgeschlagen.');
}
// Mit Passwort authentifizieren
if (!ssh2_auth_password($connection, 'benutzer', 'geheim')) {
die('Authentifizierung fehlgeschlagen.');
}
// Public-Key-Subsystem initialisieren
$pkey = ssh2_publickey_init($connection);
if (!$pkey) {
die('Public-Key-Subsystem konnte nicht initialisiert werden.');
}
// Alle autorisierten Keys abrufen
$keys = ssh2_publickey_list($pkey);
if ($keys === false) {
die('Fehler beim Abrufen der Public Keys.');
}
foreach ($keys as $key) {
echo 'Algorithmus: ' . $key['name'] . PHP_EOL;
echo 'Blob (hex): ' . bin2hex($key['blob']) . PHP_EOL;
if (!empty($key['attrs'])) {
foreach ($key['attrs'] as $attr => $value) {
echo ' Attribut: ' . $attr . ' = ' . $value . PHP_EOL;
}
}
echo '---' . PHP_EOL;
}
Anzahl autorisierter Keys ermitteln
<?php
$connection = ssh2_connect('example.com', 22);
ssh2_auth_password($connection, 'benutzer', 'geheim');
$pkey = ssh2_publickey_init($connection);
$keys = ssh2_publickey_list($pkey);
if (is_array($keys)) {
echo 'Anzahl autorisierter Public Keys: ' . count($keys) . PHP_EOL;
} else {
echo 'Keine Keys gefunden oder Fehler aufgetreten.' . PHP_EOL;
}
// Wichtig · Fallstricke
Verfügbarkeit: Die Funktion ist nur verfügbar, wenn die PECL-Erweiterung ssh2 installiert ist (pecl install ssh2). Sie ist nicht Bestandteil der PHP-Kerninstallation.
Serverunterstützung: Nicht alle SSH-Server unterstützen das publickey-Subsystem (RFC 4819). Falls der Server es nicht unterstützt, schlägt ssh2_publickey_init() bereits fehl, und diese Funktion kann nicht verwendet werden.
Sicherheit: Die über diese Funktion abgerufenen Schlüssel-Blobs sind Rohdaten und sollten nie ungefiltert in Ausgaben oder Logs geschrieben werden, um Informationslecks zu vermeiden. Verbindungsdaten (Passwörter, Schlüssel) sollten stets sicher gespeichert und nicht im Quellcode hart kodiert sein.