Вызов ejabberdctl из PHP - PullRequest
       55

Вызов ejabberdctl из PHP

1 голос
/ 10 марта 2010

Я работаю в социальной сети php, которая требует от нас создания учетных записей XMPP для всех новых участников. У меня есть рабочий сервер Ejabberd, работающий с mod_admin_extra, все работает нормально.

Я пытаюсь вызвать ejabberdctl из php-файла следующим образом:

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 ]

2 голосов
/ 23 апреля 2011

Возможно, вам повезет больше, если использовать phpseclib, чистую реализацию PHP SSH :

<?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 голос
/ 09 марта 2011

Ejabberd имеет специальную учетную запись, и она будет работать нормально, если мой вызов php exec начинается с:

su - ejabberd -c "команды ejabberd ..."

(без пароля ... хмм)

0 голосов
/ 23 августа 2010

Избегайте использования sudo, скопируйте файл cookie ejabberd своему пользователю www и позвоните прямо в ejabberdctl.

Кроме того, вы можете изучить mod_xmlrpc, который позволит вам выполнять любые команды ejabberdctl через интерфейс XMLRPC.

0 голосов
/ 22 апреля 2010

Иногда это происходит, если вы запускаете ejabberd с пользователем, а затем используете другого пользователя для перезапуска, поэтому, возможно, это как-то связано с пользователем, который запускает команду через php?

...