Do not use \n to end the command. Some server will fail to process. Use always the standard for PHP end of line: PHP_EOL
'suri at suribala dot com"'s example should be modified as follows (also change the double quotes to single, for better performance):
<?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;'.PHP_EOL);
fwrite( $shell, 'ls -la;'.PHP_EOL);
fwrite( $shell, 'cd /dir_two;'.PHP_EOL);
fwrite( $shell, 'ls -la;'.PHP_EOL);
?>
Cheers,
Pimmy
ssh2_shell
(PECL ssh2 >= 0.9.0)
ssh2_shell — Demande un shell interactif
Description
Ouvre un shell sur le serveur distant et lui alloue un flux.
Liste de paramètres
- session
-
Un identifiant de connexion SSH, obtenu depuis la fonction ssh2_connect().
- term_type
-
term_type doit correspondre à une des entrées du fichier /etc/termcap du système cible et vaut par défaut vanilla.
- env
-
env doit être passé en tant qu'un tableau associatif de paire nom/valeur à définir dans l'environnement cible.
- width
-
Largeur du terminal virtuel.
- height
-
Hauteur du terminal virtuel.
- width_height_type
-
width_height_type doit être soit SSH2_TERM_UNIT_CHARS, soit SSH2_TERM_UNIT_PIXELS.
Valeurs de retour
Exemples
Exemple #1 Exécution d'une commande
<?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);
?>
Voir aussi
- ssh2_exec() - Exécute une commande sur un serveur distant
- ssh2_tunnel() - Ouvre un tunnel à travers un serveur distant
- ssh2_fetch_stream() - Parcours un flux étendu de données
ssh2_shell
02-May-2008 03:26
12-Jul-2007 11:49
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);
?>
09-Jul-2007 08:17
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.'<br>';
}
...
...
Thanks,
Vikram Gopu .
http:\\my.lsu.edu/vgopu1
16-Feb-2007 05: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. ;)
18-Dec-2006 05: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,
08-Jun-2005 08: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 :)
14-Feb-2005 01: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 !
