|
ssh2_shell
Request an interactive shell
(PECL ssh2:0.10-0.9)
Example 2366. Executing a command<?php Code Examples / Notes » ssh2_shellsuri
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 Languagessh2_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 |