我已经安装了php-libvirt以及所有必需的软件包(我尝试了remi rpm和编译)。
我已经按如下方式设置了我的 php 文件:
<?php
print_r ( libvirt_version() );
echo '<br>';
$uri="qemu+tcp:///system";
$credentials=array(VIR_CRED_AUTHNAME=>"fred",VIR_CRED_PASSPHRASE=>"fred");
echo ("Connecting to libvirt (URI:$uri)<BR>");
$conn=libvirt_connect($uri,false,$credentials);
if ($conn==false)
{
echo ("Libvirt last error: ".libvirt_get_last_error()."<br>");
exit;
} else {
$hostname=libvirt_get_hostname($conn);
echo ("hostname:$hostname<br>");
?>
但是,当我加载页面时,我得到:
Array ( [libvirt.release] => 2 [libvirt.minor] => 10 [libvirt.major] => 0 [connector.version] => 0.4.8 [connector.major] => 0 [connector.minor] => 4 [connector.release] => 8 )
Connecting to libvirt (URI:qemu+tcp:///system)
Libvirt last error: unable to connect to server at 'localhost:16509': Permission denied
当我运行时,它从命令行工作正常
# virsh -c qemu+tcp:///system list请输入您的身份验证名称:弗雷德请输入您的密码: ID 名称状态----------------------------------------------------
我已经从另一台服务器尝试了命令行,以确保它可以远程工作并且很好。
我试过fred@hostname但没有用。我试过VIR_CRED_USERNAME,但也没有用。
可能是什么问题?
默认情况下,libvirtd TCP 连接的身份验证机制是 SASL。到目前为止,TCP 连接正在侦听,现在我们必须配置基于 SASL 的身份验证。编辑/etc/libvirt/libvirtd.conf,他们使用 auth_tcp = "none",但使用 auth_tcp = "sasl" 如果还没有完成。现在执行以下命令。
sudo saslpasswd2 -a libvirt fred
Password: fred
Again (for verification): fred
在您的情况下,libvirtd 正在侦听 TCP 连接,但有时我们需要进行一些更改以使其侦听给定端口。参考文献中的第一个链接将对此很有用。
引用:
https://askubuntu.com/questions/423425/i-cant-use-libvirt-with-listen-tcp
http://libvirt.org/auth.html#ACL_server_username
https://www-01.ibm.com/support/knowledgecenter/linuxonibm/liabp/liabpkvmsecsrmsasl.htm