ssh2_shell

(PECL)

ssh2_shell --  Request an interactive shell

Description

resource ssh2_shell ( resource session [, string term_type [, array env [, int width [, int height [, int width_height_type]]]]] )

Open a shell at the remote end and allocate a stream for it. term_type should correspond to one of the entries in the target system's /etc/termcap file and defaults to vanilla. env may be passed as an associative array of name/value pairs to set in the target environment.

width, and height define the width and height of the virtual terminal allocated for the shell process. width_height_type should be one of SSH2_TERM_UNIT_CHARS or SSH2_TERM_UNIT_PIXELS.

例子 1. Executing a command

<?php
$connection
= ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');

$stream = ssh2_shell($connection, 'vt102', null, 80, 24, SSH2_TERM_UNIT_CHARS);
?>

See Also: ssh2_exec(), ssh2_tunnel(), and ssh2_fetch_stream()


add a note add a note User Contributed Notes
webmaster at spectreanime dot com
08-Jun-2005 04:38
// Connection to SSH server
       echo "Connexion SSH ";
       if (!($resource=@ssh2_connect("192.168.0.1"))) {
               echo "[FAILED]<br />";
               exit(1);
       }
       echo "[OK]<br />";
                                                                                                                                                            
       // Authentification by login/passwd
       echo "Authentification ";
       if (!@ssh2_auth_password($resource,"root","your_password")) {
               echo "[FAILED]<br />";
               exit(1);
       }
       echo "[OK]<br />";
                                                                                                                                                            
       // We need a shell
       echo "Shell stdio ";
       if (!($stdio = @ssh2_shell($resource,"xterm"))) {
               echo "[FAILED]<br />";
               exit(1);
       }
       echo "[OK]<br />";
                                                                                                                                                            
       // Execution of any command
       // Be careful to add an '\n' at the  end of the command
       $command = "/bin/ls /tmp\n";
       fwrite($stdio,$command);
                                                                                                                                                            
       // IMPORTANT
       // For some obscur reasons, just after ur command, u need to make a sleep to be sure, that the command has reached the server and is running
       sleep(1);
      
       // Then u can fetch the stream to see what happens on stdio
       while($line = fgets($stdio)) {
               flush();
               echo $line."<br />";
       }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
       // It's always cleaner to close all stream
       fclose($stdio);

I truly hope i'll help someone :)
suri at suribala dot com
14-Feb-2005 09:03
Using ssh_exec, one could execute only one command at a time. However, ssh_shell, offers greater flexibility.

Here is an example:

<?php

$con
=ssh2_connect('192.168.0.1', 22);
ssh2_auth_password($con, "user", "password");
$shell=ssh2_shell($con, 'xterm');
fwrite( $shell, "cd /dir_one\n");
fwrite( $shell, "ls -la\n");
fwrite( $shell, "cd /dir_two\n");
fwrite( $shell, "ls -la\n");

?>

Thanks Sara for your implementation and your help !