2014-12-04 2 views
0

Я пытаюсь выполнить php-файл с удаленного сервера, как если бы я набрал «php example.php» в консоли удаленных серверов. В настоящее время он пытается вернуть исходный сервер. Я попытался выполнить прямо из php, Net_SSH2 и выполнить .sh. Я не уверен, где я ошибаюсь. Я постараюсь сломать вопрос, насколько смогу.Пытаюсь выполнить PHP-файл с удаленного сервера

Database

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

Файлы

Основной сервер (10.0.0.10): carrytoserver.php, execpw.php, execpw2.php, execpw3.php, execute.php

Сервер приложений (10.0.0.20): grabid.php, login.php, makeconfig.php, local_script.php, carry.txt

Все разрешения 777

MAINSERVER

execute.php

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

carrytoserver.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"); 
?> 

execpw.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('php /test/example/grabid.php'); 
?> 

Appserver

carry.txt

testpassword 

grabid.php

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

?> 

makeconfig.php

<?php 

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


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

?> 

local_script

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

execute.php выполнит carrytoserver.php, который будет нести пароль к 10.0.0.20 и поместить его в carry.txt , Затем он выполнит execpw.php, который выполнит grabid.php 10.0.0.20. grabid.php затем захватит идентификатор, связанный с паролем.

После этого все 10.0.0.20 должны иметь $ password и $ id. Затем Grabid.php выполнит makeconfig.php и создаст файл конфигурации json для приложения.

В настоящее время он перенесет пароль до 10.0.0.20 и выполнит grabid.php, но не создаст файл json или продолжит работу. Если я добавлю $ password на вершину grabid.php и запустится с консоли 10.0.0.20, он будет запущен.

Если я добавлю echo "hi"; до конца grabid.php и запустить с самого начала, он будет эхом «привет» на консоль сервера 10.0.0.10.

Я также попробовал несколько других вещей в файле 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 [email protected] 'php grabid.php'"; 
exec ($executephp); 

?> 

Все дают тот же результат. Я сожалею о перегрузке информации, но я стараюсь предоставить как можно больше информации.

+0

Я собираюсь предположить, что это имеет какое-то отношение к разрешениям. Просто для уточнения, когда вы запускаете файл 'grabid.php' самостоятельно из' 10.0.0.20', он работает? Но когда вы запускаете весь скрипт и запускаете SSH-клиент 'grabid.php' с' 10.0.0.10', он не работает? Вы регистрируетесь в 10.0.0.20 как 'serverusername'? – Scopey

+0

Я думал так же, поэтому я открыл разрешения на файл, я уверен, что есть еще что-то, что я мог бы сделать, и да, я просто сделал это как можно более общим, но для всего доступа, с которым я в настоящее время пользуюсь root. Я изменюсь выше. И да, когда я запускаю его на 10.0.0.20, он работает, но когда я запускаю его на 10.0.0.10, он запускается до и через makeconfig.php. Если я поставлю эхо после «include makeconfig.php», он даст эхо в консоли 10.0.0.10, но не сделает файл конфигурации 10.0.0.20. – benswmay

+0

Когда вы запускаете команду php из оболочки, она будет запускаться как вы (в вашем случае - root), я уверен, что это будет то, что 'serverusername' не имеет разрешения на создание выходного файла json, но я могу ' t быть полностью уверен. – Scopey

ответ

1

EDIT:

Если carry.txt и grabid.php путь правилен, то вы должны изменить линию grabid.php следующим образом:

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

Я ошибся, когда привел свой фактический код в свою область. Я исправил это, но это не проблема. На сервере приложений у меня также есть файл carry.txt в обеих областях с «testpassword» в обоих. Чтобы устранить проблему с keeptoserver.php, а также устранить неправильный путь к файлу. Я отредактирую выше. Спасибо – benswmay

+0

Я пробую свой код (кроме части базы данных) на своих виртуальных машинах, и единственной проблемой был путь к файлу в функции file_get_contents(), как я уже говорил ранее. Попробуйте изменить путь к файлу в файле_get_contents(), как показано выше, указав путь _absolute файла_. – chipaki

0

я смог это исправить путем изменения «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); 

?> 

Благодарим за помощь!

Смежные вопросы