PHP: ssh2_shell - Manual

downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

ssh2_tunnel ssh2_sftp

Last updated: Sat, 27 Jan 2007

view this page in

# 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 User Contributed Notes
ssh2_shell
johnes at netsite dot com dot br
16-Feb-2007 09:27
`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 at galvao dot eti dot br
18-Dec-2006 09:03
`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,`
webmaster at spectreanime dot com
08-Jun-2005 01: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 05: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 !`
add a note
ssh2_tunnel ssh2_sftp

Last updated: Sat, 27 Jan 2007
show source | credits | stats | sitemap | contact | advertising | mirror sites
Copyright © 2001-2007 The PHP Group
All rights reserved.
This mirror generously provided by: Yahoo! Inc.
Last updated: Sat Mar 10 10:36:09 2007 PST