phpseclib не работает для удаленного выполнения команд

Я застрял с проблемой в php за последние 3 дня. решения пока не нашел.

У меня есть удаленная машина Cent OS и локальная машина Ubuntu. У меня есть php-скрипт с именем test.php на моей локальной машине, поэтому я хочу запустить некоторые команды Linux на удаленной машине, используя этот php-скрипт. Я использовал phpseclib для подключения к удаленной машине. Ниже приведен php-скрипт test.php.

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

define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);

$ssh = new Net_SSH2('10.3.2.0');
if (!$ssh->login('makesubdomain','abcdabcd')) {
    exit('Login Failed');
}
echo $ssh->exec('/usr/local/listdomain.backup/test/makedir.sh');
?>

Я не могу использовать здесь пользователя root, так как вход в систему root отключен на удаленной машине Cent OS. Итак, я создал этого пользователя makesubdomain и дал привилегии sudo, также без пароля, добавив makesubdomain ALL=(ALL) NOPASSWD: ALL в файл /etc/sudoers. Ниже приведен сценарий оболочки, который находится в 10.3.2.0.

sudo -H sh -c '
    mkdir /usr/local/testdir
    if [ $? -eq 0 ];then
        echo  "success";
    else
        echo "not success";
    fi
'

Но теперь, когда я запускаю php-скрипт из терминала с помощью команды php test.php, он показывает ошибку sudo: sorry, you must have a tty to run sudo. В конечном счете, что мне нужно сделать с test.php и makedir.sh для создания каталога testdir, как указано в файле .sh, с использованием данного php-скрипта с пользователем makesubdomain. Пожалуйста, посоветуйте, так как я очень новичок в php.

(Примечание: я могу успешно запустить файл makedir.sh на удаленной машине с помощью команды sudo ./makedir от имени пользователя makesubdomain, это тоже без запроса пароля sudo)

ИЗМЕНИТЬ

Я прокомментировал Defaults requiretty в /etc/sudoers, как указано в http://www.unix.com/shell-programming-scripting/201211-sudo-sorry-you-must-have-tty-run-sudo.html, и он работает отлично. Могу ли я иметь какой-либо другой вариант, не делая этого?


person Uvais Ibrahim    schedule 01.08.2013    source источник


Ответы (1)


Попробуйте позвонить $ssh->enablePTY(), прежде чем делать $ssh->exec().

person neubert    schedule 01.08.2013