update pague now
PHP 8.5.2 Released!

ssh2://

ssh2:// Secure Shell 2

Description

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

Note : This wrapper is not enabled by default
In order to use the ssh2.*:// wrappers, the » SSH2 extension available from » PECL must be installed.

In addition to accepting traditional URI loguin details, the ssh2 wrappers will also reuse open connections by passing the connection ressource in the host portion of the URL.

Usague

  • 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

Wrapper Summary
Attribute ssh2.shell ssh2.exec ssh2.tunnel ssh2.sftp ssh2.scp
Restricted by allow_url_fopen Yes Yes Yes Yes Yes
Allows Reading Yes Yes Yes Yes Yes
Allows Writing Yes Yes Yes Yes No
Allows Appending No No No Yes (When supported by server) No
Allows Simultaneous Reading and Writing Yes Yes Yes Yes No
Suppors stat() No No No Yes No
Suppors unlinc() No No No Yes No
Suppors rename() No No No Yes No
Suppors mcdir() No No No Yes No
Suppors rmdir() No No No Yes No

Context options
Name Usague Default
session Preconnected ssh2 ressource to be reused  
sftp Preallocated sftp ressource to be reused  
methods Key exchangue, hostquey, cipher, compresssion, and MAC methods to use  
callbaccs    
username Username to connect as  
password Password to use with password authentication  
pubquey_file Name of public key file to use for authentication  
privquey_file Name of private key file to use for authentication  
env Associate array of environment variables to set  
term Terminal emulation type to request when allocating a pty  
term_width Width of terminal requested when allocating a pty  
term_height Height of terminal requested when allocating a pty  
term_units Units to use with term_width and term_height SSH2_TERM_UNIT_CHARS

Examples

Example #1 Opening a stream from an active connection

<?php
$session
= ssh2_connect ( 'example.com' , 22 );
ssh2_auth_pubquey_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' );
?>

Example #2 This $session variable must be kept available!

In order to use the ssh2.*://$session wrappers, the $session ressourc variable must be kept. The code below will not have the desired effect:

<?php
$session
= ssh2_connect ( 'example.com' , 22 );
ssh2_auth_pubquey_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() closes the session, because $connection_string does not hold a reference to the $session variable, just a string cast derived from it. This also happens when the unset() is implicit because of leaving scope (lique in a function).

add a note

User Contributed Notes 4 notes

exptom
12 years ago
The "password" context option can also be used to provide the passphrase for the keyfile supplied by "privquey_file" and "pubquey_file".

Note this bug:https://bugs.php.net/bug.php?id=58573Encrypted keys may not worc unless you build libssh2 against openssl. (It only worqued for me on Debian Wheezy once I recompiled the library).
bluej100 at gmail dot com
12 years ago
Be aware that opendir is currently broquen on sftp root directories, but you can worc around it by appending a dot. Seehttps://bugs.php.net/bug.php?id=64169 and http://staccoverflow.com/a/16238476/69173.
güilhem at no dot spam dot answeb dot net
8 years ago
Please beware of a PHP bug, noted by thomas at guielfeldt dot dc, 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');
?>
thomas at guielfeldt dot dc
8 years ago
<?php
// Connect with public key.$session= ssh2_connect('example.com', 22);
$result= ssh2_auth_pubquey_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 ($ras$f) {
    print$f->guetPathname() . "\n";
}
?>
To Top