RemoteBox

来自 ArchWiki

RemoteBox 是一个开源远程客户端,用于管理 VirtualBox,使用 PerlGTK 编写。它允许管理服务器上的 VirtualBox 安装,包括其虚拟机,并像在本地运行一样与之交互。虽然 VirtualBox 安装在服务器端,但 RemoteBox 在客户端机器上运行。它提供了一个完整的 GTK 图形界面,外观和感觉与 VirtualBox 的原生 GUI 非常相似。如果您熟悉其他虚拟化软件,例如 VMWare ESX,那么可以将 RemoteBox 视为“穷人版的 VI 客户端”。

安装

客户端

RemoteBox 是客户端应用程序,可以通过安装 remoteboxAUR 软件包获得。对于远程桌面操作,还需要 RDP 客户端。RemoteBox 包括 freerdprdesktopkrdc 的预设。截至撰写本文时,freerdp-gitAUR 2.0.0.beta1 已经过测试并发现可以工作。或者,VNC 可以与 TigerVNCvinagrekrdcrealvnc-vnc-viewerAUR 的预设一起使用。

服务器端

VM 主机需要一个可用的 VirtualBox 安装。对于远程桌面操作,需要非免费的 Oracle VM VirtualBox 扩展包 以支持 RDP,或者可以使用开源的 virtualbox-ext-vnc 以支持 VNC。还要考虑为虚拟机安装 guest additions ISO,以便能够安装或更新工具。

VirtualBox 安装包括VirtualBox Web 服务 (vboxwebsrv),它提供一个 HTTP(S) 服务器,为 RemoteBox 等客户端提供 API。该服务不应该也不允许以root 身份运行。为了提高安全性,应该创建一个额外的用户来运行虚拟机和 Web 服务。用户需要密码(用于远程登录)、主目录(用于 VirtualBox 设置和虚拟机配置)以及 shell(以便 RemoteBox 能够登录)。本页面的其余部分假设用户为 vbox,主组为 vboxusers

提供的服务文件 /usr/lib/systemd/system/vboxweb.service 用作模板,可以使用 drop-in 文件 进行自定义,如下所示

/etc/systemd/system/vboxweb.service.d/override.conf
[Service]
User=vbox
Group=vboxusers
PIDFile=/run/vboxwebsrv/vboxwebsrv.pid
ExecStart=
ExecStart=/usr/bin/vboxwebsrv --pidfile /run/vboxwebsrv/vboxwebsrv.pid --background --host 0.0.0.0

可以通过编辑上面覆盖文件中的 ExecStart 行来启用日志记录,以包含 --logfile <日志文件位置> 指令。为了提高详细程度,您还可以包含 --verbose 指令。确保 vbox 用户有权写入配置的日志文件位置。

可以将 --host 指令更改为 localhost 或主机名,以仅在本地绑定服务,或者设置为单个选定接口的 IP。可以使用 --port 设置默认端口 18083 之外的备用端口。

您还需要为 vboxwebsrv 的 PID 文件创建一个 tmpfile 规则

/etc/tmpfiles.d/vboxwebsrv.conf
d /run/vboxwebsrv 0755 vbox vboxusers

要立即测试 vboxweb.service,您需要首先手动创建 /run/vboxwebsrv 目录

# mkdir /run/vboxwebsrv
# chown vbox:vboxusers /run/vboxwebsrv
# chmod 755 /run/vboxwebsrv

现在,vboxweb.service 可以启动和/或启用

连接 RemoteBox 到 vboxwebsrv

打开 RemoteBox 并单击连接按钮。指定以下内容

URL: http:<server IP>:18083
Username: vbox
Password: <vbox user password>

为了在以后的会话中更容易连接,登录后转到文件 > 连接配置文件并创建一个新的连接配置文件。

故障排除

如果您在连接到服务器时遇到登录问题,请首先检查服务是否正在运行。从服务器控制台,检查 vboxweb.service 单元状态

它应该输出它正在运行。如果没有,请使用 journalctl 检查日志记录,如果您配置了 --logfile,请检查 vboxwebsrv 的日志文件以获取任何线索。

即使提高了详细程度,VirtualBox Web 服务也可能不会为您提供任何有用的线索。在这种情况下,您可以尝试使用 susudo 从命令行手动以 vbox 身份运行服务器。

[vbox]$ /usr/bin/vboxwebsrv --pidfile /run/vboxwebsrv/vboxwebsrv.pid --host 0.0.0.0

省略 --background--logfile 指令。如果服务启动,问题可能是日志文件的权限。让它运行并检查您是否可以从客户端使用 RemoteBox 连接。还要检查 ~/.config/VirtualBox 目录是否已创建并填充了配置和/或日志文件。

如果您仍然无法连接,可以使用 Ctrl-c 停止服务,并使用 --background 指令启动它。接下来,使用 netstat 或类似的命令检查 vboxwebsrv 是否正在端口 18083 上监听。如果您看到不同的端口,您可以尝试在 RemoteBox 上连接到该端口。

另一个原因可能是防火墙,无论是在您的服务器上,还是在您的客户端上。

如果您收到以下错误消息

vboxwebsrv: error: failed to initialize COM! hrc=NS_ERROR_FAILURE

检查您的主目录对于用户 vbox 是否可写。

另请参阅