1

我正在编写一个使用一些 shell 脚本的 PHP 前端。但是,问题是我必须以特定用户的身份在一个非常特定的目录(可访问但不属于 www-data)中调用脚本。

$command = './myscript.py 2>&1 |  tee /tmp/outputfile.txt';       // set the command
$cwd = 'cd /home/secondUser/myscript';                                // set current working directory
$wrapper = 'echo "Password" | sudo -u secondUser bash -c';        // add extra wrappers
$fullCommand = $cwd.';'.$wrapper.' "'.$command.'"';             // combine subcommands
$output = system($fullCommand);

我正在尝试不同的执行命令(shell_exec,exec ...)。但是,我一直在日志中发现以下错误:

sudo: no tty present and no askpass program specified

问题不仅在于运行 shell 脚本(例如,通过编辑 sudoers),而且在于将其作为特定的 ruser 运行。

有什么提示或技巧吗?

4

1 回答 1

0

1) ## Heading ##这不是 PHP 相关的,而是 unix 相关的,所以它可能应该被移动到其他一些 stackexchange 服务器。

您提到的日志行也告诉您确切的问题是什么。Sudo 不允许您从脚本中向其传递密码,它需要一个终端 (tty) 以便它可以关闭本地回显(因此您不会输入您输入的字母作为密码)。您可以在 sudoers 文件中覆盖它。但是您可能应该以完全不同的方式解决它,要么使用私人无密码密钥以使用 SSH 的不同用户身份登录,要么允许“sudo”没有密码的命令。两者都在这里提到:

2)他们已经解决了这个问题: https ://serverfault.com/questions/160524/using-su-inside-of-a-shell-script

于 2012-05-02T10:24:49.053 回答