我正在开发一个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
那是什么给了什么?
答案 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命令。