Signatur
Beschreibung
ssh2_keepalive_send() schickt eine Keepalive-Nachricht über eine bestehende SSH2-Sitzung. Dadurch wird verhindert, dass die Verbindung durch Timeouts auf Server- oder Netzwerkseite unterbrochen wird, wenn über längere Zeiträume keine Daten übertragen werden.
Diese Funktion ist besonders nützlich bei lang laufenden Skripten oder Hintergrundprozessen, die eine SSH2-Verbindung dauerhaft aufrechterhalten müssen – z. B. für periodische Dateiübertragungen oder die Ausführung von Remote-Befehlen mit langen Pausen dazwischen.
Um Keepalive-Nachrichten nutzen zu können, muss der Server Keepalive-Anfragen unterstützen und die Sitzung muss zuvor mit ssh2_connect() und entsprechenden Keepalive-Einstellungen (via ssh2_keepalive_config()) konfiguriert worden sein.
Die Funktion gehört zur ssh2-Erweiterung (PECL), die separat installiert werden muss und auf der libssh2-Bibliothek basiert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $session Pflicht | resource | Eine aktive SSH2-Verbindungs-Ressource, wie sie von ssh2_connect() zurückgegeben wird. |
Rückgabewert
true zurück, wenn die Keepalive-Nachricht erfolgreich gesendet wurde, andernfalls false.Beispiele
Keepalive-Nachricht in einer Schleife senden
<?php
// SSH2-Verbindung aufbauen
$session = ssh2_connect('example.com', 22);
if (!$session) {
die('Verbindung fehlgeschlagen');
}
// Authentifizierung
ssh2_auth_password($session, 'benutzer', 'geheimesPasswort');
// Keepalive konfigurieren: alle 30 Sekunden, Server soll antworten
ssh2_keepalive_config($session, true, 30);
// Simulierter Langzeit-Prozess
for ($i = 0; $i < 10; $i++) {
// Keepalive senden, damit die Verbindung aktiv bleibt
if (!ssh2_keepalive_send($session)) {
echo "Keepalive fehlgeschlagen – Verbindung möglicherweise unterbrochen.\n";
break;
}
echo "Keepalive gesendet (Iteration $i)\n";
sleep(25); // Pause zwischen Keepalives
}
?>
Prüfung der SSH2-Verbindung durch Keepalive
<?php
function isSessionAlive(mixed $session): bool {
if (!is_resource($session)) {
return false;
}
return ssh2_keepalive_send($session);
}
$session = ssh2_connect('example.com', 22);
ssh2_auth_agent($session, 'benutzer');
ssh2_keepalive_config($session, true, 60);
if (isSessionAlive($session)) {
echo "SSH-Verbindung ist aktiv.\n";
} else {
echo "SSH-Verbindung wurde unterbrochen.\n";
}
?>
// Wichtig · Fallstricke
Voraussetzungen: Die ssh2-Erweiterung (PECL) muss installiert sein (pecl install ssh2). Die unterliegende libssh2-Bibliothek muss ebenfalls vorhanden sein.
Keepalive-Konfiguration: Ohne vorherigen Aufruf von ssh2_keepalive_config() hat ssh2_keepalive_send() möglicherweise keinen Effekt. Stellen Sie sicher, dass die Keepalive-Optionen korrekt gesetzt sind.
Serverseitige Unterstützung: Nicht alle SSH-Server reagieren auf Keepalive-Nachrichten. Bei manchen Firewalls oder Proxies werden Keepalive-Pakete gefiltert, was trotz Sendung zu Verbindungsabbrüchen führen kann.