Start · Sprachen · PHP · Referenz · ssh2://

ssh2://

Funktion

Stream-Wrapper für SSH2-Verbindungen, der verschlüsselten Datei- und Befehlszugriff über das Secure-Shell-2-Protokoll ermöglicht.

seit PHP 4.3.0 Kategorie: misc

Signatur

ssh2://user:password@host:port/path

Beschreibung

Der ssh2://-Wrapper ist ein URL-Stream-Wrapper, der es erlaubt, über das SSH2-Protokoll auf entfernte Dateisysteme und Befehle zuzugreifen. Er gehört zur PECL-Erweiterung ssh2 (ext/ssh2) und muss daher gesondert installiert sein. Über diesen Wrapper können Standard-PHP-Dateifunktionen wie file_get_contents(), file_put_contents(), fopen() usw. auf SSH2-Ressourcen angewendet werden.

Die URL-Syntax lautet allgemein: ssh2.sftp://ressource/pfad für SFTP-Zugriff oder ssh2.exec://ressource/befehl für die Befehlsausführung. Häufig wird zunächst eine SSH2-Verbindungsressource über ssh2_connect() erstellt, authentifiziert und dann als Stream-Kontext oder direkt als Ressource an den Wrapper übergeben.

Der Wrapper unterstützt verschiedene Unterprotokolle: ssh2.exec:// für die Ausführung von Befehlen, ssh2.tunnel:// für TCP-Tunnel, ssh2.sftp:// für SFTP-Dateioperationen und ssh2.scp:// für SCP-Dateiübertragungen. Je nach Anwendungsfall wird das passende Unterprotokoll gewählt.

Da für alle Operationen eine authentifizierte SSH2-Verbindungsressource benötigt wird, ist der typische Arbeitsablauf: Verbindung herstellen mit ssh2_connect(), Authentifizierung durchführen (z. B. mit ssh2_auth_password() oder ssh2_auth_pubkey_file()) und dann den zurückgegebenen Ressource-Zeiger für den Wrapper nutzen.

Parameter

Name Typ Default Beschreibung
$host Pflicht string Hostname oder IP-Adresse des SSH2-Servers.
$port int 22 Port des SSH2-Servers; standardmäßig 22.
$user Pflicht string Benutzername für die SSH2-Authentifizierung.
$password string Passwort für die Passwort-Authentifizierung. Für Public-Key-Authentifizierung wird stattdessen ssh2_auth_pubkey_file() verwendet.
$path string Pfad zur Datei auf dem entfernten System (bei ssh2.sftp://) oder auszuführender Befehl (bei ssh2.exec://).

Rückgabewert

Typ
resource|false
Beschreibung
Gibt eine Stream-Ressource zurück, die mit den üblichen PHP-Stream-Funktionen genutzt werden kann, oder false bei einem Fehler.

Beispiele

SFTP-Datei lesen mit ssh2.sftp://

<?php
// PECL ssh2-Erweiterung muss installiert sein
$verbindung = ssh2_connect('example.com', 22);
if (!$verbindung) {
    die('Verbindung fehlgeschlagen');
}

// Passwort-Authentifizierung
if (!ssh2_auth_password($verbindung, 'benutzer', 'geheimesPasswort')) {
    die('Authentifizierung fehlgeschlagen');
}

// SFTP-Subsystem initialisieren
$sftp = ssh2_sftp($verbindung);

// Datei über den Wrapper lesen
$inhalt = file_get_contents('ssh2.sftp://' . intval($sftp) . '/var/www/html/index.php');
echo $inhalt;

Befehl auf entferntem Server ausführen mit ssh2.exec://

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

// Befehl auf dem entfernten Server ausführen
$stream = ssh2_exec($verbindung, 'ls -la /var/www/');
stream_set_blocking($stream, true);

$ausgabe = stream_get_contents($stream);
fclose($stream);

echo $ausgabe;

Datei per SFTP hochladen

<?php
$verbindung = ssh2_connect('example.com', 22);
ssh2_auth_pubkey_file(
    $verbindung,
    'benutzer',
    '/home/benutzer/.ssh/id_rsa.pub',
    '/home/benutzer/.ssh/id_rsa'
);

$sftp = ssh2_sftp($verbindung);

// Lokale Datei auf den entfernten Server hochladen
$lokaleInhalt = 'Hallo, SSH2-Welt!';
file_put_contents(
    'ssh2.sftp://' . intval($sftp) . '/tmp/test.txt',
    $lokaleInhalt
);

echo 'Datei erfolgreich hochgeladen.';
Datei erfolgreich hochgeladen.

// Wichtig · Fallstricke

Sicherheitshinweise:

  • Passwörter sollten niemals im Klartext in URL-Strings hart kodiert werden. Nutze statt dessen Umgebungsvariablen oder sichere Konfigurationsdateien.
  • Bevorzuge die Public-Key-Authentifizierung (ssh2_auth_pubkey_file()) gegenüber der Passwort-Authentifizierung.
  • Überprüfe den Fingerabdruck des Host-Schlüssels mit ssh2_fingerprint(), um Man-in-the-Middle-Angriffe zu verhindern.
  • Der Wrapper erfordert die PECL-Erweiterung ssh2, die nicht standardmäßig in PHP enthalten ist und separat installiert werden muss (pecl install ssh2).
  • Bei der Verwendung von intval($sftp) als Teil der URL wird die numerische Ressource-ID der SFTP-Verbindung genutzt — dieses Verfahren ist ein gängiger Workaround, da direkte Ressource-Objekte nicht in URLs eingebettet werden können.
  • Ab PHP 8.0 werden Ressourcen-IDs als Integerwerte verwendet; das Casting mit (int) bleibt aber kompatibel.