Execute commands on remote machine via PHP Execute commands on remote machine via PHP linux linux

Execute commands on remote machine via PHP


Run SSH commands through PHP on server A to server B.

Here is how to run ssh commands with the command line in linux: http://www.youtube.com/watch?NR=1&feature=fvwp&v=YLqqdQZHzsU

In order to run commands on linux with PHP use the exec() command.

I hope this will get you started looking in the right direction.

Look at these two posts for automating the password prompt

Here is a quick example with non-working code to get you thinking:

<?php    $server = "serverB.example.org";    //ip address will work too i.e. 192.168.254.254 just make sure this is your public ip address not private as is the example    //specify your username    $username = "root";    //select port to use for SSH    $port = "22";    //command that will be run on server B    $command = "uptime";    //form full command with ssh and command, you will need to use links above for auto authentication help    $cmd_string = "ssh -p ".$port." ".$username."@".$server." ".$command;    //this will run the above command on server A (localhost of the php file)    exec($cmd_string, $output);    //return the output to the browser    //This will output the uptime for server B on page on server A    echo '<pre>';    print_r($output);    echo '</pre>';?>

The recommended flow is to run a command on server A to SSH to server B


Use phpseclib to securely SSH or SCP to remote servers

Install withcomposer require phpseclib/phpseclib

use phpseclib\Crypt\RSA;use phpseclib\Net\SSH2;use phpseclib\Net\SCP;// Load your private key$key = new RSA();$key->loadKey('private key string');// Connect to the server$ssh = new SSH2('ip_address', 'port', 'timeout');if (!$ssh->login('username', $key)) {    throw new Exception("Unable to connect");}// Run a remote commandecho $ssh->exec('whoami');// SCP put a string$result = (new SCP($ssh))->put('remotePath', 'content to put');// SCP put a file$result = (new SCP($ssh))->put('remotePath', 'localPath', SCP::SOURCE_LOCAL_FILE);// SCP get a file$result = (new SCP($this->ssh))->get('remotePath', 'localPath');// $result is true or false


I recommend SSH2 to execute commands on remote machine. You can use pecl to install it easily. After that, you may use ssh2_exec() function to execute your commands and ssh2_fetch_stream() function to get stderr. Example codes are listed below:

// start connection$connection = ssh2_connect("your remote ip address", your port);ssh2_auth_password($connection,"your user name","your passwd");// connection established, start to execute codes$stream = ssh2_exec($connection, "your command");  $errorStream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);// block 2 streams simutaneouslystream_set_blocking($errorStream, true);stream_set_blocking($stream,true);// write stdout and stderr to log filefile_put_contents("your log file-path", date('Y-m-d H:i:s')."\nError: ".stream_get_contents($errorStream)."\nOutput: ".stream_get_contents($stream), FILE_APPEND)// close 2 streams   fclose($errorStream);fclose($stream);// close remote connectionssh2_exec($connection, 'exit');

Cheers.