Start · Sprachen · PHP · Referenz · ssh2_keepalive_send

ssh2_keepalive_send

Funktion

Sendet eine SSH-Keepalive-Nachricht über eine bestehende SSH2-Verbindung, um diese aktiv zu halten.

Kategorie: http

Signatur

ssh2_keepalive_send(resource $session): bool

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

Typ
bool
Beschreibung
Gibt 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
}
?>
Keepalive gesendet (Iteration 0) Keepalive gesendet (Iteration 1) ...

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";
}
?>
SSH-Verbindung ist aktiv.

// 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.