3

我从堆栈中找到了一个代码,用于使用 php 在 ejabberd xmpp 聊天服务器中执行注册命令。(从 PHP 创建 ejabberd 用户

我还在 ubuntu linux server 12.0 的“/etc/sudoers”文件中添加了“www-data ALL=NOPASSWD:/usr/sbin/ejabberdctl”行

但是当我执行文件时出现错误:

“read_passphrase:无法打开/dev/tty:没有这样的设备或地址主机密钥验证失败。”

我使用的php代码如下:

`<?php
$username = 'tester';
$password = 'testerspassword';
$node = 'myserver.com';
exec('sudo /usr/sbin/ejabberdctl register '.$username.' '.$node.' '.$password.' 2>&1',$output,$status);
if($output == 0)
{
    // Success!
}
else
{
    // Failure, $output has the details
    echo '<pre>';
    foreach($output as $o)
    {
        echo $o."\n";
    }
    echo '</pre>';
}
?>`

请帮我!

谢谢

4

2 回答 2

0

嗨以下代码对我有用..

只需更改上述代码中的一行

exec('sudo -u ejabberd ejabberdctl register '.$username.' '.$node.' '.$password.' 2>&1',$output,$status);

于 2015-05-08T13:38:41.303 回答
0

该部分sudo -u ejabberd表示命令应在拥有您的ejabberd进程的用户内执行。通常这应该是一个非特权用户,但也许你的用户被称为不同的,或者你甚至可能使用 root。在后一种情况下,命令应如下所示:

exec('sudo -u root ejabberdctl register '.$username.' '.$node.' '.$password.' 2>&1',$output,$status);

请注意,出于安全原因,外部网络(如互联网)可访问的运行服务不应以 root 身份运行!

于 2021-02-10T19:01:42.787 回答