Signatur
Beschreibung
ssh2_disconnect() beendet eine SSH2-Sitzung, die zuvor mit ssh2_connect() aufgebaut wurde. Die Funktion sendet das entsprechende SSH-Trennungspaket an den Server und gibt intern verwendete Ressourcen frei. Sie sollte am Ende jeder SSH-Verbindung aufgerufen werden, um sauber zu trennen.
Die Funktion gehört zur PECL-Erweiterung ssh2 und ist daher nicht in der Standard-PHP-Distribution enthalten. Sie muss über PECL installiert und in der php.ini aktiviert sein (extension=ssh2.so).
Typische Einsatzszenarien sind die Ausführung von Remote-Befehlen, SFTP-Dateiübertragungen oder Tunnel-Verbindungen, nach deren Abschluss die Verbindung ordnungsgemäß geschlossen werden soll. Wird ssh2_disconnect() nicht aufgerufen, wird die Verbindung erst beim Ende des PHP-Skripts durch den Garbage Collector getrennt, was zu unnötig langen offenen Verbindungen auf dem Server führen kann.
Nach dem Aufruf von ssh2_disconnect() sollte die $session-Ressource nicht weiter verwendet werden, da sie ungültig wird. Jeder weitere Aufruf auf dieser Ressource führt zu einem PHP-Fehler.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $session Pflicht | resource | Eine gültige SSH2-Sitzungs-Ressource, wie sie von ssh2_connect() zurückgegeben wird. |
Rückgabewert
true zurück, wenn die Verbindung erfolgreich getrennt wurde, andernfalls false.Beispiele
Einfache SSH2-Verbindung herstellen und sauber trennen
<?php
// SSH2-Verbindung zum Server aufbauen
$session = ssh2_connect('example.com', 22);
if (!$session) {
die('Verbindung zum SSH-Server fehlgeschlagen.');
}
// Authentifizierung mit Benutzername und Passwort
if (!ssh2_auth_password($session, 'benutzer', 'geheimesPasswort')) {
die('Authentifizierung fehlgeschlagen.');
}
// Remote-Befehl ausführen
$stream = ssh2_exec($session, 'uname -a');
stream_set_blocking($stream, true);
$output = stream_get_contents($stream);
fclose($stream);
echo 'Ergebnis: ' . $output . PHP_EOL;
// Verbindung sauber trennen
if (ssh2_disconnect($session)) {
echo 'Verbindung erfolgreich getrennt.' . PHP_EOL;
} else {
echo 'Fehler beim Trennen der Verbindung.' . PHP_EOL;
}
?>
SFTP-Dateiübertragung mit anschließendem Disconnect
<?php
$session = ssh2_connect('example.com', 22);
if (!$session) {
die('Verbindung fehlgeschlagen.');
}
// Authentifizierung per Public-Key
if (!ssh2_auth_pubkey_file(
$session,
'benutzer',
'/home/user/.ssh/id_rsa.pub',
'/home/user/.ssh/id_rsa'
)) {
die('Authentifizierung per Public-Key fehlgeschlagen.');
}
// SFTP-Subsystem initialisieren
$sftp = ssh2_sftp($session);
if (!$sftp) {
ssh2_disconnect($session);
die('SFTP-Initialisierung fehlgeschlagen.');
}
// Datei hochladen
$localFile = '/tmp/upload.txt';
$remoteFile = 'ssh2.sftp://' . intval($sftp) . '/home/benutzer/upload.txt';
if (file_put_contents($remoteFile, file_get_contents($localFile)) !== false) {
echo 'Datei erfolgreich hochgeladen.' . PHP_EOL;
} else {
echo 'Fehler beim Hochladen der Datei.' . PHP_EOL;
}
// Verbindung immer sauber trennen
ssh2_disconnect($session);
echo 'SSH-Sitzung beendet.' . PHP_EOL;
?>
// Wichtig · Fallstricke
PECL-Abhängigkeit: ssh2_disconnect() ist Teil der PECL-Erweiterung ssh2 und muss separat installiert werden (pecl install ssh2). Ohne diese Erweiterung ist die Funktion nicht verfügbar.
Ressourcen-Verwaltung: Nach dem Aufruf von ssh2_disconnect() ist die Sitzungs-Ressource ungültig. Jeder weitere Zugriff auf $session führt zu einer PHP-Warnung oder einem Fatal Error. Es empfiehlt sich, die Variable nach dem Disconnect auf null zu setzen ($session = null;).
Offene Streams: Alle über diese Sitzung geöffneten Streams (z. B. durch ssh2_exec() oder ssh2_sftp()) sollten vor dem Aufruf von ssh2_disconnect() mit fclose() geschlossen werden, um Datenverlust oder undefiniertes Verhalten zu vermeiden.