簡體   English   中英

嘗試從遠程服務器執行 PHP 文件

[英]Trying to Execute PHP File From Remote Server

我正在嘗試從遠程服務器執行 php 文件,就像我在遠程服務器控制台中鍵入“php example.php”一樣。 目前,它一直試圖回饋給原始服務器。 我試圖直接從 php、Net_SSH2 執行,並執行 .sh。 我不確定我哪里出錯了。 我會盡力分解這個問題。

數據庫

------------------------
|   ID | password      |
------------------------
|   50 | testpassword  |
------------------------

文件

主服務器(10.0.0.10):carrytoserver.php, execpw.php, execpw2.php, execpw3.php, execute.php

應用服務器(10.0.0.20):grapid.php、login.php、makeconfig.php、local_script.php、carry.txt

所有權限都是777

主服務器

執行文件

<?php
    $password="testingpassword";
    include('carrytoserver.php');
    include('execpw.php');
?>

攜帶到服務器.php

<?php
include('Net/SSH2.php');


    $ssh = new Net_SSH2('10.0.0.20');
    if (!$ssh->login('root', 'serverpassword')) {
    exit('Login Failed');
}


echo $ssh->exec("echo $password > /test/example/carry.txt");
?>

執行文件

<?php
    include('Net/SSH2.php');

    $ssh = new Net_SSH2('10.0.0.20');
    if (!$ssh->login('root', 'serverpassword')) {
        exit('Login Failed');
    }

    echo $ssh->exec('php /test/example/grabid.php');
?>

應用服務器

攜帶.txt

testpassword

抓取文件

<?php 
include 'login.php';
$carrypw=file_get_contents('carry.txt');
$password=str_replace("\n","", $carrypw);
$con=mysql_connect("$host", "$username", "$dbpassword")or die("cannot connect"); 
mysql_select_db("$db_name") or die ("cannot select DB"); 

  $result = mysql_query("SELECT * FROM example
WHERE password='$password'");

while($row = mysql_fetch_array($result)) {
  $id = $row['ID'];

}

include 'makeconfig.php';

?>

配置文件

<?php

$return_arr = array('ID' => $id, 'password' => "$password");


$json_data = json_encode($return_arr);
file_put_contents("config.json", $json_data);

?>

本地腳本

#! /bin/bash
echo "php grabid.php"

execute.php 將執行carrytoserver.php,它會將密碼傳送到10.0.0.20 並將其放入carry.txt。 然后它會執行 execpw.php,它會在 10.0.0.20 上執行grapid.php。 然后grapid.php 將抓取與密碼相關的ID。

一旦完成所有這些,10.0.0.20 應該有 $password 和 $id。 Grabid.php 然后將執行 makeconfig.php 並為應用程序創建 json 配置文件。

目前它會將密碼傳送到 10.0.0.20 並執行grapid.php 但不會創建json 文件或繼續運行。 如果我將 $password 添加到grapid.php 的頂部並從 10.0.0.20 控制台運行,它將運行。

如果我添加 echo "hi"; 到grapid.php 的末尾並從頭開始運行,它將在10.0.0.10 服務器控制台上回顯“hi”。

我還在 execpw.php 文件中嘗試了其他一些東西

execpw2.php

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('10.0.0.20');
if (!$ssh->login('root', 'serverpassword')) {
    exit('Login Failed');
}

echo $ssh->exec('/test/example/local_script.sh');
?>

execpw3.php

<?php

$executephp="ssh root@10.0.0.20 'php grabid.php'";
exec ($executephp);

?>

都給出相同的結果。 我很抱歉信息過多,但我正在努力提供盡可能多的信息。

編輯 :

如果carry.txt和grapid.php路徑正確,那么你應該將grapid.php這行改成如下:

$carrypw=file_get_contents('/test/example/carry.txt');

我能夠通過將“file_put_contents”更改為絕對路徑來修復它。

<?php

$return_arr = array('ID' => $id, 'password' => "$password");


$json_data = json_encode($return_arr);
file_put_contents("/test/example/config.json", $json_data);

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM