Start · Sprachen · PHP · Referenz · ssh2_publickey_remove

ssh2_publickey_remove

Funktion

Entfernt einen zuvor autorisierten öffentlichen Schlüssel vom entfernten SSH2-Server über die Public-Key-Subsystem-Schnittstelle.

Kategorie: http

Signatur

ssh2_publickey_remove(resource $pkey, string $algoname, string $blob): bool

Beschreibung

ssh2_publickey_remove() gehört zur SSH2 Public-Key-Subsystem-API und ermöglicht es, einen bereits autorisierten öffentlichen Schlüssel vom Server zu entfernen. Dazu wird eine aktive Public-Key-Subsystem-Ressource benötigt, die zuvor mit ssh2_publickey_init() erzeugt wurde.

Die Funktion identifiziert den zu löschenden Schlüssel anhand des Algorithmus-Namens ($algoname, z. B. "ssh-rsa" oder "ssh-dss") sowie des rohen binären Schlüssel-Blobs ($blob). Diese beiden Parameter entsprechen denen, die bei ssh2_publickey_add() verwendet wurden.

Typischer Anwendungsfall ist die Verwaltung autorisierter SSH-Schlüssel auf einem entfernten Server: Schlüssel, die nicht mehr benötigt werden oder zu kompromittierten Identitäten gehören, können so programmatisch und ohne manuellen Shell-Zugriff widerrufen werden.

Zu beachten ist, dass diese Funktion die PECL-Erweiterung ssh2 voraussetzt und nicht Bestandteil der PHP-Kernbibliothek ist. Die Erweiterung muss separat installiert werden.

Parameter

Name Typ Default Beschreibung
$pkey Pflicht resource Eine aktive Public-Key-Subsystem-Ressource, die mit ssh2_publickey_init() erzeugt wurde.
$algoname Pflicht string Name des Schlüsselalgorithmus, z. B. "ssh-rsa" oder "ssh-dss". Muss mit dem bei ssh2_publickey_add() verwendeten Algorithmus übereinstimmen.
$blob Pflicht string Der rohe binäre Schlüssel-Blob des zu entfernenden öffentlichen Schlüssels. Entspricht dem $blob-Parameter, der beim Hinzufügen des Schlüssels übergeben wurde.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false wenn der Schlüssel nicht gefunden wurde oder beim Entfernen ein Fehler aufgetreten ist.

Beispiele

Autorisierten SSH-Schlüssel vom Server entfernen

<?php
// SSH-Verbindung aufbauen
$connection = ssh2_connect('example.com', 22);
if (!$connection) {
    die('Verbindung fehlgeschlagen.');
}

// Authentifizierung (z. B. per Passwort)
ssh2_auth_password($connection, 'admin', 'geheimesPasswort');

// Public-Key-Subsystem initialisieren
$pkey = ssh2_publickey_init($connection);
if (!$pkey) {
    die('Public-Key-Subsystem konnte nicht initialisiert werden.');
}

// Den zu entfernenden Schlüssel-Blob laden (binär, z. B. aus Datei)
$blob = file_get_contents('/pfad/zu/id_rsa.pub.blob');

// Schlüssel entfernen
$result = ssh2_publickey_remove($pkey, 'ssh-rsa', $blob);

if ($result) {
    echo 'Öffentlicher Schlüssel erfolgreich entfernt.';
} else {
    echo 'Fehler beim Entfernen des Schlüssels.';
}
Öffentlicher Schlüssel erfolgreich entfernt.

Alle aufgelisteten Schlüssel eines Benutzers entfernen

<?php
$connection = ssh2_connect('example.com', 22);
ssh2_auth_password($connection, 'admin', 'geheimesPasswort');

$pkey = ssh2_publickey_init($connection);
if (!$pkey) {
    die('Initialisierung fehlgeschlagen.');
}

// Alle autorisierten Schlüssel auflisten
$keys = ssh2_publickey_list($pkey);

foreach ($keys as $key) {
    // Jeden Schlüssel entfernen
    if (ssh2_publickey_remove($pkey, $key['name'], $key['blob'])) {
        echo "Schlüssel ({$key['name']}) entfernt.\n";
    } else {
        echo "Fehler beim Entfernen von {$key['name']}.\n";
    }
}
Schlüssel (ssh-rsa) entfernt. Schlüssel (ssh-dss) entfernt.

// Wichtig · Fallstricke

Sicherheitshinweis: Das Entfernen von SSH-Schlüsseln ist eine sicherheitskritische Operation. Stellen Sie sicher, dass nur autorisierte Administratoren diese Funktion aufrufen können, und validieren Sie Algorithmus-Name und Blob sorgfältig, bevor Sie sie an die Funktion übergeben.

Die Funktion ist Bestandteil der PECL ssh2-Erweiterung (libssh2-basiert). Sie muss auf dem Server installiert sein (pecl install ssh2). Nicht alle SSH-Server unterstützen das Public-Key-Subsystem (RFC 4819); prüfen Sie die Server-Konfiguration im Zweifelsfall vorher.

Der $blob-Parameter muss der rohe binäre Schlüssel-Blob sein, nicht das Base64-kodierte Format aus einer .pub-Datei. Verwenden Sie ggf. base64_decode(), um den Blob aus einer Datei zu extrahieren.