To give background on my environment:
I have 3 machines A, B & C
A = Webserver, running a php website which basically acts as an interface for B & C
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 simutaneously
stream_set_blocking($errorStream, true);
stream_set_blocking($stream,true);
// write stdout and stderr to log file
file_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 connection
ssh2_exec($connection, 'exit');
Cheers.
Use phpseclib to securely SSH or SCP to remote servers
Install with
composer 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 command
echo $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
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