Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Secure Shell2 Functions : ssh2_shell

ssh2_shell

Request an interactive shell (PECL ssh2:0.10-0.9)
resource ssh2_shell ( resource session [, string term_type [, array env [, int width [, int height [, int width_height_type]]]]] )

Example 2366. 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);
?>

Code Examples / Notes » ssh2_shell

suri

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 !


josh

To run a shell script with all the variables that you would have when logged in interactively add bash -l or sh --login infront of your command.  The script I use creates a shell script, copies the script to the box with ssh2_scp_send, then executes the script with ssh2_exec.  Hope this helps somebody.
<?php
//Example
$script1 = "bash -l /etc/rc.d/rc.httpd restart";
$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
$stream = ssh2_exec($connection, $script1);
?>


johnes

Instead of using sleep(1) try using usleep(350000). If not, you will need to spend much time unnecessary. In my scripts, I tried to use usleep(250000), but it's too short and brought some problems. usleep(300000) worked, but only to garantee use 350000. ;)

galvao

In response to webmaster at spectreanime dot com:
"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"
Actually what you must do is set the blocking of the string to true, so it waits until the server sends data to the STDOUT before echoing it.
So, instead of:
sleep(1);
Just do:
stream_set_blocking($stdio, true);
Best regards,


vgopu1

Hi,
we could also use shell_exec to execute multiple related commands
separated by semicolon (;).
And I figured out  problem that sometimes arise related to the execution of complex java c/c++ programs. All we need to do is to set the required environment variables. I have a environment variable in .bash_profile. This variable would be set when I log into my account normally through shell. But when we use ssh2_connect(), the environment variables in the .bash_profile are not set, all we need to do is export the required environment variables with shell_exec();
example:
$conn = ssh2_connect($ipaddress);
ssh2_auth_password($conn,$username,$passwd);
$cmd1="/path/to/program1";
$cmd2="/path/to/program2";
$env1="export Variable_name1=path1";
$env2="export Variable_name2=path2"
$stream = ssh2_exec($connection,"$env1; $env2; $cmd1; $cmd2");//this would execute all the //commands and return
// stream
stream_set_blocking($stream, true);
while($o=fgets($stream)){
echo $o.'
';
}
...
...
Thanks,
Vikram Gopu .
http:\\my.lsu.edu/vgopu1


webmaster

// 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 :)


Change Language


Follow Navioo On Twitter
ssh2_auth_hostbased_file
ssh2_auth_none
ssh2_auth_password
ssh2_auth_pubkey_file
ssh2_connect
ssh2_exec
ssh2_fetch_stream
ssh2_fingerprint
ssh2_methods_negotiated
ssh2_publickey_add
ssh2_publickey_init
ssh2_publickey_list
ssh2_publickey_remove
ssh2_scp_recv
ssh2_scp_send
ssh2_sftp_lstat
ssh2_sftp_mkdir
ssh2_sftp_readlink
ssh2_sftp_realpath
ssh2_sftp_rename
ssh2_sftp_rmdir
ssh2_sftp_stat
ssh2_sftp_symlink
ssh2_sftp_unlink
ssh2_sftp
ssh2_shell
ssh2_tunnel
eXTReMe Tracker