通过PHP在远程机器上执行命令

时间:2013-06-10 16:23:53

标签: php linux ssh

了解我的环境背景:

我有3台机器A,B& ç

A = Webserver,运行一个php网站,它基本上充当B& B的接口。 ç

B = Linux Ubuntu机器,我有root访问权限,SSH以及通过SSH客户端在机器上工作所需的所有优点(我有一个用于此服务器的.ppk私钥文件)

C =在Linux上运行的MySql数据库服务器

我可以在C(Mysql)上成功执行来自A(php)的查询并返回结果。但现在我试图在A上执行b命令。

例如

我有一个在B上运行的脚本,并希望从A(php)执行命令来显示脚本的状态。

在命令行中执行此操作很简单 - ./SomeScript状态

但我想在服务器A上托管的网站上显示此脚本的状态。

即使只检查服务器A上服务器B的正常运行时间。

无论如何这是可能的。我已经google了看似永远,但我没有得到任何地方,如果连接是安全的,我不会分阶段,因为这是一个没有外部访问该网络的封闭网络。

任何建议都将受到高度赞赏。

由于

3 个答案:

答案 0 :(得分:9)

在服务器A上通过PHP运行SSH命令到服务器B.

以下是如何使用linux中的命令行运行ssh命令:http://www.youtube.com/watch?NR=1&feature=fvwp&v=YLqqdQZHzsU

要使用PHP在Linux上运行命令,请使用exec()命令。

我希望这会让你开始朝着正确的方向前进。

查看这两个帖子以自动输入密码

以下是 非工作 代码的快速示例,可让您思考:

<?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>';
?>

建议的流程是在服务器A上运行命令到SSH到服务器B

答案 1 :(得分:1)

使用phpseclib将SSH或SCP安全地连接到远程服务器

安装 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

答案 2 :(得分:0)

我建议SSH2在远程计算机上执行命令。您可以使用$this->response->cookie([ 'name' => 'cookie name', 'value' => 'cookie value', 'expire' => time() + (60 * 24), 'path' => '/', 'domain' => '', 'secure' => true, 'httpOnly' => false, 'sameSite' => 'None', ]); 轻松安装它。之后,您可以使用pecl函数执行命令,并使用ssh2_exec()函数获取stderr。下面列出了示例代码:

ssh2_fetch_stream()

干杯。