PHP Conference Nagoya 2025

ssh2://

ssh2://Shell sécurisé 2

Description

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

Note: Cette enveloppe n'est pas activé par défaut
Pour utiliser l'enveloppe ssh2://, l'extension » SSH2 disponible sur » PECL doit être installée.

En plus d'accepter les identifications traditionnelles via l'URI, l'enveloppe ssh2 réutilisera les connexions ouvertes en passant la ressource de connexion dans la partie hôte de l'URL.

Utilisation

  • 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

Options

Résumé de l'enveloppe
Attribut ssh2.shell ssh2.exec ssh2.tunnel ssh2.sftp ssh2.scp
Restreint par allow_url_fopen Oui Oui Oui Oui Oui
Autorise la lecture Oui Oui Oui Oui Oui
Autorise l'écriture Oui Oui Oui Oui Non
Autorise l'ajout Non Non Non Oui (lorsque supporté par le serveur) Non
Autorise la lecture et l'écriture simultanément Oui Oui Oui Oui Non
Support de la fonction stat() Non Non Non Oui Non
Support de la fonction unlink() Non Non Non Oui Non
Support de la fonction rename() Non Non Non Oui Non
Support de la fonction mkdir() Non Non Non Oui Non
Support de la fonction rmdir() Non Non Non Oui Non

Options de contexte
Nom Utilisation Défaut
session ressource ssh2 pré-connectée à réutiliser  
sftp ressource sftp pré-allouée à réutiliser  
methods méthodes d'échange de clés, hostkey, cipher, compression, et MAC, à utiliser  
callbacks    
username Nom de l'utilisateur pour la connexion  
password Mot de passe à utiliser lors d'une identification par mot de passe  
pubkey_file Nom du fichier contenant la clé publique à utiliser lors de l'identification  
privkey_file Nom du fichier contenant la clé privée à utiliser lors de l'identification  
env Tableau associatif de variables d'environnement à définir  
term Type d'émulation de terminal à demander lors de l'allocation d'un pty  
term_width Largeur du terminal à demander lors de l'allocation d'un pty  
term_height Hauteur du terminal à demander lors de l'allocation d'un pty  
term_units Unités à utiliser avec term_width et term_height SSH2_TERM_UNIT_CHARS

Exemples

Exemple #1 Ouverture d'un flux depuis une connexion active

<?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');
?>

Exemple #2 La variable $session doit rester disponible !

Afin d'utiliser l'enveloppe ssh2.*://$session, la variable de ressource $session doit être conservée. Le code ci-dessous n'aura pas l'effet escompté :

<?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');
?>

La fonction unset() clôt la session, car la variable $connection_string ne contient pas de référence à la variable $session, mais uniquement une chaîne dérivée. Ceci survient également lorsque la fonction unset() est implicite, lors d'une sortie du scope (comme dans une fonction).

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