【发布时间】:2015-02-21 23:14:41
【问题描述】:
我一直在尝试使用 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
任何有助于克服这个问题的帮助都会有很大帮助。
【问题讨论】:
-
更好的方法是在您尝试 rsync 的路径上授予适当的权限,而不是授予 Apache 和所有其他以“无人”身份运行的程序不受限制的 root 访问权限没有密码。您要求您的服务器受到威胁。这样做也可以解决您的 tty 问题。
-
@Cfreak - 我尝试更改我正在尝试 rsync 的特定目录的文件权限,但它似乎没有解决问题。