shell_exec抛出:sudo:没有tty存在且没有指定askpass程序

时间:2014-12-23 19:21:38

标签: php bash

我一直在尝试使用php中的shell_exec()函数执行脚本:

我写了以下几行代码:

$command = "bash /path/to/my/script/ funciton_name() 2>&1";
echo shell_exec($command);

在shell脚本中我正在做:

sudo rsync -avvc /source/path /destination/path

在浏览器上执行此操作时,收到以下错误消息:

sudo: no tty present and no askpass program specified

当我在服务器上执行相同的shell脚本时,它执行正常。

当我在这个论坛上发布类似的问题时,我意识到我必须在我的服务器上添加NOPASSWD行,我发现它已经按以下格式添加:

User_Alias  NOBODY=nobody,apache
NOBODY  ALL=(ALL) NOPASSWD : /path/to/my/script

当我这样做时:

echo shell_exec("whois");

我得到的输出为:

apache

克服这个问题的任何帮助都会有很大的帮助。

1 个答案:

答案 0 :(得分:0)

除非explicitly do not require it,否则

sudo 要求TTY,即使您已将其设置为无密码。但是作为@Cfreak pointed out,通过设置正确的safer来避免sudo会更好(更简单的 access rights)(在继续之前阅读它)首先。

rsync 本身不需要在明智配置的* nix安装上拥有root权限。要验证这一点,您可以检查type -a rsync是否打印出rsync is aliased to `sudo rsync'之类的奇怪内容,而ls -l $(which rsync)打印出合理的权限(每个人至少rx)。< / p>