PHP - выполнить команду как root - PullRequest
0 голосов
/ 14 января 2012

Я пытаюсь выполнить команду как su из php.

Когда я кладу команду в терминал или с php /var/www/script.php, она работает отлично, но когда я открываю script.php через браузер, она возвращает - sudo: no tty present and no askpass program specified

Спасибо.

Ответы [ 2 ]

0 голосов
/ 20 мая 2016

Я недавно опубликовал проект, который позволяет PHP получать и взаимодействовать с реальной оболочкой Bash.Получите это здесь: https://github.com/merlinthemagic/MTS

Вы можете получить настоящую оболочку bash от имени root.Затем вы можете запустить ваш php-скрипт или выполнить команды непосредственно в bash.

После загрузки вы просто используете следующий код:

    $shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
    $return1  = $shell->exeCmd('yourFirstCommand');
    $return2  = $shell->exeCmd('yourSecondCommand');
    //the return will be a string containing the return of the script
    echo $return1;
    echo $return2;

    //or if you want to trigger your script as root
    $return3  = $shell->exeCmd('php /my/script.php');
    echo $return3;

    //If your script contains code to make an SSH connection to another server 
    //there is a much easier way to do that using the project:
    $shell = \MTS\Factories::getDevices()->getRemoteHost('ip_address')->getShellBySsh('username', 'secretPassword');
0 голосов
/ 14 января 2012

Согласно это :

ssh не выделяет tty по умолчанию при запуске удаленной команды.Без tty, sudo не может отключить эхо при запросе пароля.Вы можете использовать опцию ssh "-t", чтобы заставить его выделять tty.Кроме того, если вы не возражаете, чтобы ваш пароль отображался на экране, вы можете использовать опцию "visiblepw" sudoers, чтобы разрешить это.

...