Я застрял с проблемой в 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, и он работает отлично. Могу ли я иметь какой-либо другой вариант, не делая этого?