Я пытаюсь в конечном итоге использовать функцию php shell_exec
для создания новых пользователей Linux.Я, однако, сталкиваюсь с проблемами даже с отладкой.Вот мой код
<?PHP
function adduser($username,$password,$server){
try{
//3 debug statements
$output=shell_exec("pwd");
echo $output;
shell_exec("touch test.txt");
//3 debug statements are requested by Christian
echo '<pre>';
print_r(execute('pwd'));
print_r(execute('touch test.txt'));
//actuall code
$output=shell_exec("ssh root@$server \"adduser $username; echo $password | passwd $username --stdin\"");
}
catch(Exception $e){
echo 'could not add user '.$e->getMessage();
}
}
$servers = array('192.168.1.8');
foreach($servers as $server){
echo $_GET['USER']." ".$_GET['PASSWORD'];
adduser($_GET['USER'],$_GET['PASSWORD'],$server);
}
Операторы try-catch
ничего не делают, что наводит меня на мысль, что ошибки оболочки не распространяются как ошибки PHP (Python тоже так).Строка $output=shell_exec("pwd")
возвращает правильный каталог.Однако строка shell_exec("touch test.txt")
не может создать файл test.txt (даже если я укажу полный путь '/home/user/.../test.txt').
Излишне говорить,фактический код для добавления пользователей также не работает.
EDIT Мне удалось исправить часть кода.Ошибка touch test.txt
была вызвана недостаточными разрешениями.Apache входит в систему с пользовательскими данными www, я просто создал домашнюю папку для этого пользователя и позаботился о том, чтобы прикоснуться к файлу в этой домашней папке.
Добавление трех операторов отладки в соответствии с запросами Кристиана,Однако сейчас возникают проблемы.
РЕДАКТИРОВАТЬ При дальнейшей проверке это связано с невозможностью использовать ssh как root при входе в систему как пользовательские www-данные.ssh -v
возвращает debug1: read_passphrase: can't open /dev/tty: No such device or address
.Я предполагаю, что ssh спрашивает, что общий "вы хотели бы добавить xxx навсегда к известному_хосту", но я не могу ответить.Есть ли возможность вручную добавить пользователя в список известных хостов?