[英]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.