我正在尝试从php执行su命令。
当我将命令放在终端或php /var/www/script.php
时,它工作正常,但当我通过浏览器打开script.php时它会返回 - sudo: no tty present and no askpass program specified
感谢。
答案 0 :(得分:0)
根据this:
运行远程命令时,ssh默认情况下不会分配tty。 没有tty,sudo在提示输入密码时无法禁用echo。 您可以使用ssh的“-t”选项强制它分配tty。 或者,如果你不介意你的密码被回应 屏幕,您可以使用“visiblepw”sudoers选项来允许此操作。
答案 1 :(得分:0)
我最近发布了一个项目,允许PHP获取真正的Bash shell并与之交互。在此处获取:https://github.com/merlinthemagic/MTS
您可以以root身份获得真正的bash shell。然后,您可以触发您的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');