PhpVirtualBox
phpVirtualBox 是一个开源的,基于 AJAX 实现的 VirtualBox 用户界面,使用 PHP 编写。作为一个现代化的 Web 界面,它允许您访问和控制远程 VirtualBox 实例。它的许多措辞和一些代码都基于 (不活跃的) vboxweb 项目。phpVirtualBox 的设计目的是允许用户在无头环境中管理 VirtualBox - 通过其 Web 界面镜像 VirtualBox GUI。
安装
要远程控制虚拟机,您需要两个组件:VirtualBox 网络服务,与虚拟机在同一操作系统中运行;以及 Web 界面,使用 PHP 编写,因此依赖于支持 PHP 的 Web 服务器。它们之间的通信基于 SOAP 协议,目前未加密,因此建议将两者安装在同一台机器上,如果您不希望您的用户名和密码以明文形式通过网络发送。
VirtualBox 网络服务
要使用 Web 控制台,您必须安装 virtualbox-ext-oracleAUR 软件包。
VirtualBox 网络界面 (phpvirtualbox)
安装 phpvirtualbox 软件包。您还需要您选择的支持 PHP 的 Web 服务器 (Apache HTTP 服务器 是一个合适的选择)。
配置
从现在开始,假设您已正确配置 Web 服务器 (根目录在 /srv/http
) 和 PHP 功能。
网络服务
在虚拟机设置中,启用远程桌面访问并指定一个与其他虚拟机不同的端口。
每次您需要使机器远程可用时,执行如下操作
vboxwebsrv -b --logfile path/to/log/file --pidfile /run/vbox/vboxwebsrv.pid --host 127.0.0.1
以您希望服务从其运行的用户帐户运行 (如果已在 /etc/host.conf
中启用与 localhost 的关联,则 --host
选项不是必需的)。
virtualbox 为 systemd 提供了 vboxweb.service
。
要从非 root 用户启动 vboxweb
,您必须
- 在
vboxusers
组中创建或添加用户 (例如,vbox
) - 编辑 像这样编辑
vboxweb_mod.service
[Unit] Description=VirtualBox Web Service After=network.target [Service] Type=forking PIDFile=/run/vboxweb/vboxweb.pid ExecStart=/usr/bin/vboxwebsrv --pidfile /run/vboxweb/vboxweb.pid --background User=vbox Group=vboxusers [Install] WantedBy=multi-user.target
- 为您的
vboxweb_mod.service
创建 tmpfile 规则# echo "d /run/vboxweb 0755 vbox vboxusers" > /etc/tmpfiles.d/vboxweb_mod.conf
- 手动创建
/run/vboxweb
目录以首次启动vboxweb_mod.service
# mkdir /run/vboxweb # chown vbox:vboxusers /run/vboxweb # chmod 755 /run/vboxweb
或者只需重启您的系统即可自动创建。 - 启动/启用
vboxweb_mod.service
网络界面
编辑 /etc/php/php.ini
,取消注释以下行
extension=soap
适当编辑示例配置文件 /usr/share/webapps/phpvirtualbox/config.php-example
(它有很好的注释,不需要解释)。将该文件复制到 /etc/webapps/phpvirtualbox/config.php
并符号链接到 /usr/share/webapps/phpvirtualbox/config.php
。
然后,编辑 /etc/php/php.ini
,查找 open_basedir
并在末尾附加配置路径 /etc/webapps/
。它将看起来像这样
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/
如果您正在运行 Apache 作为 Web 服务器,您可以将 /etc/webapps/phpvirtualbox/apache.example.conf
复制到 /etc/httpd/conf/extra/phpvirtualbox.conf
。如果您正在运行 Apache 2.4,由于 ACL 语法的更改,编辑该文件以替换以下内容
Order allow,deny Allow from all
为
Require all granted
接下来,将以下行添加到 /etc/httpd/conf/httpd.conf
Include conf/extra/phpvirtualbox.conf
编辑 /etc/webapps/phpvirtualbox/.htaccess
并删除以下行。
deny from all
不要忘记重启 Web 服务器 (例如,对于 Apache,重启 httpd.service
)。
运行
如果一切正常,请访问 http://您的VboxWebInterfaceHost/phpvirtualbox,它应该显示一个登录框。初始用户名和密码均为 "admin",登录后从 Web 界面更改它们 (文件 -> 更改密码)。如果您在 Web 界面 config.php
中设置 $noAuth=true
,您应该立即看到 phpvirtualbox Web 界面。
调试
如果您遇到登录问题,并且您已将 VirtualBox 从 3.2.x 升级到 4.0.x,您应该运行以下命令来更新您 VirtualBox 配置文件中的 websrvauthlibrary,该文件已从 VRDPAuth.so
更改为 VBOXAuth.so
。
VBoxManage setproperty vrdeauthlibrary default VBoxManage setproperty websrvauthlibrary default
如果您遇到登录问题,并出现包含以下内容的错误消息
[message:protected] => Could not connect to host (http://127.0.0.1:18083/)
那么您可能需要编辑 /etc/webapps/phpvirtualbox/config.php
变量 location 以使用 localhost
而不是 127.0.0.1
。有关更多信息,请参阅 此论坛帖子。
如果您仍然无法登录界面,您可以尝试禁用 Web 身份验证,方法是
VBoxManage setproperty websrvauthlibrary null
在虚拟化服务器上,并将用户名和密码设置为空字符串,并在 Web 服务器上的 /etc/webapps/phpvirtualbox/config.php
中设置 $noAuth=true。 这样做,您应该立即访问 Web 界面,而无需登录过程。然后,也许您可以尝试一些 Apache 访问控制。