Signatur
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
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.';
}
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";
}
}
// 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.