从PHP调用ejabberdctl

时间:2010-03-10 12:10:07

标签: php permissions sudo ejabberd sudoers

我正在开发一个php社交网络,要求我们为所有新成员创建XMPP帐户。我有一个运行mod_admin_extra的工作Ejabberd服务器都工作正常。

我试图从像这样的php文件中调用ejabberdctl:

exec('sudo /home/user/ejabberd-2.1.2/bin/ejabberdctl register test server pass 2>&1');

但是我收到以下错误:

Failed RPC connection to the node ejabberd@localhost: nodedown

虽然命令行可以使用相同的命令。

我还在/ etc / sudoers中添加了以下内容:

www-data ALL= NOPASSWD: /home/webuser/ejabberd-2.1.2/bin/ejabberdctl

那是什么给了什么?

4 个答案:

答案 0 :(得分:2)

使用phpseclib, a pure PHP SSH implementation可能会有更好的运气:

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('localhost', 22);
$ssh->login('username', 'password');

$ssh->read('[prompt]');
$ssh->write("su - user\n");
$ssh->read('Password:');
$ssh->write("Password\n");
echo $ssh->read('[prompt]');
?>

答案 1 :(得分:1)

Ejabberd有一个特殊的帐号,如果我的php exec调用开头,它对我来说很好用:

su - ejabberd -c“ejabberd命令......”

(没有密码......嗯)

答案 2 :(得分:0)

如果您与用户启动ejabberd然后使用其他用户重新启动,有时会发生这种情况,那么它可能与通过php运行命令的用户有关吗?

答案 3 :(得分:0)

避免使用sudo,将ejabberd cookie复制到www用户并直接调用ejabberdctl。

此外,您可能需要查看mod_xmlrpc,它允许您通过XMLRPC接口执行任何ejabberdctl命令。