PHP 8.4.2 Released!

ssh2://

ssh2://Secure Shell 2

Descripción

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

Nota: Esta envoltura no está habilitada por omisión
Para poder usarse la envoltura ssh2.*:// debe instalarase la extensión » SSH2 disponible en » PECL.

Además de permitir hacer un login tradicional en la URI, la envoltura ssh2 también puede reutilizar las conexiones ya abiertas, proporcionando el recurso de conexión en el apartado host de la URL.

Uso

  • ssh2.shell://usuario:contraseña@ejemplo.com:22/xterm
  • ssh2.exec://usuario:contraseña@ejemplo.com:22/usr/local/bin/comando
  • ssh2.tunnel://usuario:contraseña@ejemplo.com:22/192.168.0.1:14
  • ssh2.sftp://usuario:contraseña@ejemplo.com:22/ruta/a/fichero

Opciones

Resumen de la Envoltura
Atributo ssh2.shell ssh2.exec ssh2.tunnel ssh2.sftp ssh2.scp
Restringido por allow_url_fopen
Permite Lecturas
Permite Escrituras No
Permite Añadir contenidos No No No Sí (cuando esté soportado por el servidor) No
Permite Lecturas y Escrituras Simultáneas No
Permite usar la función stat() No No No No
Permite usar la función unlink() No No No No
Permite usar la función rename() No No No No
Permite usar la función mkdir() No No No No
Permite usar la función rmdir() No No No No

Opciones de contexto
Nombre Uso Valor por omisión
session Recurso ssh2 preconectado a utilizar  
sftp Recurso sftp preubicado a reutilizar  
methods métodos a usar de entre Key exchange, hostkey, cipher, compression, y MAC  
callbacks    
username Nombre de usuario con el que conectar  
password Contraseña a utilizar en autenticación con contraseña  
pubkey_file Nombre del fichero con la clave pública que se usará para autenticar  
privkey_file Nombre del fichero con la clave privada que se usará para autenticar  
env Array asociativo con las variables de entorno que se van a asignar  
term Tipo de emulación del terminal a solicitar cuando se asigne un pty (pseudo terminal)  
term_width Ancho del terminal solicitado cuando se asigne un pty  
term_height Altura del terminal solicitado cuando se asigne un pty  
term_units Unidades a usar con term_width y con term_height SSH2_TERM_UNIT_CHARS

Ejemplos

Ejemplo #1 Abriendo un flujo a partir de una conexión activa

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

Ejemplo #2 ¡La variable $session debe permanecer disponible!

Para utilizar la envoltura ssh2.*://$session debe mantenerse el recurso $session disponible. El código siguiente no tendrá el efecto deseado:

<?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() cierra la sesión, ya que $connection_string no contiene una referencia a la variable $session, simplemente una representación de la cadena derivada de ella. Esto también ocurre cuando unset() va implícito porque se sale del ámbito (como dentro de una función).

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