PHP Conference Nagoya 2025

ssh2://

ssh2://Secure Shell 2

Beschreibung

ssh2.shell:// ssh2.exec:// ssh2.tunnel:// ssh2.sftp:// ssh2.scp:// (PECL)

Hinweis: Dieser Wrapper ist standardmäßig nicht aktiviert
Um den Wrapper ssh2.*:// verwenden zu können, muss die » SSH2-Erweiterung von » PECL installiert werden

Neben den herkömmlichen URI-Anmeldedaten akzeptieren die ssh2-Wrapper auch eine im Host-Teil der URL übergebene Verbindungsressource, mit der offene Verbindungen wiederverwendet werden können.

Verwendung

  • ssh2.shell://user:pass@example.com:22/xterm
  • ssh2.exec://user:pass@example.com:22/usr/local/bin/somecmd
  • ssh2.tunnel://user:pass@example.com:22/192.168.0.1:14
  • ssh2.sftp://user:pass@example.com:22/path/to/filename

Optionen

Zusammenfassung des Wrappers
Eigenschaft ssh2.shell ssh2.exec ssh2.tunnel ssh2.sftp ssh2.scp
Eingeschränkt durch allow_url_fopen Ja Ja Ja Ja Ja
Erlaubt Lesen Ja Ja Ja Ja Ja
Erlaubt Schreiben Ja Ja Ja Ja Nein
Erlaubt Anfügen Nein Nein Nein Ja (falls vom Server unterstützt) Nein
Erlaubt gleichzeitiges Lesen und Schreiben Ja Ja Ja Ja Nein
Unterstützt stat() Nein Nein Nein Ja Nein
Unterstützt unlink() Nein Nein Nein Ja Nein
Unterstützt rename() Nein Nein Nein Ja Nein
Unterstützt mkdir() Nein Nein Nein Ja Nein
Unterstützt rmdir() Nein Nein Nein Ja Nein

Kontextoptionen
Name Verwendung Voreinstellung
session Vorab verbundene ssh2-Ressource, die wiederverwendet werden soll  
sftp Vorab zugewiesene sftp-Ressource, die wiederverwendet werden soll  
methods Schlüsselaustausch, Host-Schlüssel, Verschlüsselung, Komprimierung und MAC-Methoden, die verwendet werden sollen  
callbacks    
username Der Benutzername für die Verbindung  
password Das Passwort für die Authentifizierung  
pubkey_file Der Name der Datei, die den öffentlichen Schlüssel für die Authentifizierung enthält  
privkey_file Der Name der Datei, die den privaten Schlüssel für die Authentifizierung enthält  
env Ein assoziatives Array der zu setzenden Umgebungsvariablen  
term Der Typ der Terminalemulation, der bei der Zuweisung eines pty angefordert wird  
term_width Die Breite des Terminals, die bei der Zuweisung eines pty angefordert wird  
term_height Die Höhe des Terminals, die bei der Zuweisung eines pty angefordert wird  
term_units Die Einheiten, die für term_width und term_height verwendet werden sollen SSH2_TERM_UNIT_CHARS

Beispiele

Beispiel #1 Öffnen eines Streams aus einer aktiven Verbindung

<?php
$session
= ssh2_connect('example.com', 22);
ssh2_auth_pubkey_file($session, 'username', '/home/username/.ssh/id_rsa.pub',
'/home/username/.ssh/id_rsa', 'secret');
$stream = fopen("ssh2.tunnel://$session/remote.example.com:1234", 'r');
?>

Beispiel #2 Diese $session-Variable muss immer verfügbar sein!

Um die ssh2.*://$session-Wrapper verwenden zu können, muss die Ressourcenvariable $session erhalten bleiben. Der folgende Code hat nicht die gewünschte Wirkung:

<?php
$session
= ssh2_connect('example.com', 22);
ssh2_auth_pubkey_file($session, 'username', '/home/username/.ssh/id_rsa.pub',
'/home/username/.ssh/id_rsa', 'secret');
$connection_string = "ssh2.sftp://$session/";
unset(
$session);
$stream = fopen($connection_string . "path/to/file", 'r');
?>

unset() schließt die Session, weil $connection_string keinen Verweis auf die Variable $session enthält, sondern nur eine von ihr abgeleitete Zeichenkette. Dies ist auch der Fall, wenn unset() implizit aufgerufen wird, weil der Gültigkeitsbereich verlassen wird (z. B. bei einer Funktion).

add a note

User Contributed Notes 4 notes

up
8
exptom
11 years ago
The "password" context option can also be used to provide the passphrase for the keyfile supplied by "privkey_file" and "pubkey_file".

Note this bug: https://bugs.php.net/bug.php?id=58573
Encrypted keys may not work unless you build libssh2 against openssl. (It only worked for me on Debian Wheezy once I recompiled the library).
up
7
bluej100 at gmail dot com
11 years ago
Be aware that opendir is currently broken on sftp root directories, but you can work around it by appending a dot. See https://bugs.php.net/bug.php?id=64169 and http://stackoverflow.com/a/16238476/69173.
up
5
guilhem at no dot spam dot answeb dot net
7 years ago
Please beware of a PHP bug, noted by thomas at gielfeldt dot dk, that you must intval() the connection variable before putting it in the connection string :

<?php
$connection
= ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
$sftp = ssh2_sftp($connection);
// See: https://bugs.php.net/bug.php?id=73597
$stream = fopen("ssh2.sftp://" . intval($sftp) . "/path/to/file", 'r');
?>
up
0
thomas at gielfeldt dot dk
7 years ago
<?php
// Connect with public key.
$session = ssh2_connect('example.com', 22);
$result = ssh2_auth_pubkey_file($session, 'remote-username', '/home/local-username/.ssh/id_rsa.pub',
'/home/local-username/.ssh/id_rsa',
'secret');
// Setup sftp stream wrapper
$sftp = ssh2_sftp($session);
// See: https://bugs.php.net/bug.php?id=73597
$connection_string = 'ssh2.sftp://' . intval($sftp);

// List files in remote homedir.
$i = new \RecursiveDirectoryIterator("$connection_string/home/remote-username");
$r = new \RecursiveIteratorIterator($i);
foreach (
$r as $f) {
print
$f->getPathname() . "\n";
}
?>
To Top