我正在尝试为staging->生产发布脚本创建PHP Web界面。 Web界面是安全的(Intranet,passworded等),所以我很高兴apache充当root用户来执行rsync。 root用户没有密码,密钥文件用于SSH访问。
我在shell脚本中试过sudo-ing rysnc命令......
sudo rsync --verbose --recursive --times --perms --links --delete /tmp/dir1/* /tmp/dir2/
允许apache通过将以下内容添加到sudoers文件来运行rsync ...
apache ALL=(ALL) NOPASSWD:/usr/bin/rsync
我使用PHP shell_exec来调用脚本......
$result = shell_exec('bash /tmp/syncscript.sh 2>&1');
我收到以下错误...
sorry, you must have a tty to run sudo
如何设置以便我可以运行rsync命令,就好像我是root用户一样?
谢谢!
答案 0 :(得分:2)
如果你想从PHP使用SUDO,你可能想尝试我在这篇文章中写的内容。它解决了我所有的问题,我有一个类似的设置,我在内部有一个DEV服务器,但我希望它做只有root的东西......
How to use exec() in php in combination with ssh 'hostname' command?
祝你好运答案 1 :(得分:1)
最终采用非sudo方法来解决这个问题。使用phpseclib作为可以执行我需要的操作(不是apache)的用户连接到框。然后确保此用户可以访问rsync操作中目标的目录/文件。
现在看起来很简单,我回头看看。