第 7 章 远程虚拟机

目录

7.1. 远程显示(VRDP 支持)
7.1.1. 常用第三方 RDP 查看器
7.1.2. VBoxHeadless:远程桌面服务器
7.1.3. 逐步操作:在无头服务器上创建虚拟机
7.1.4. 远程 USB
7.1.5. RDP 身份验证
7.1.6. RDP 加密
7.1.7. VRDP 服务器的多重连接
7.1.8. 多个远程显示器
7.1.9. VRDP 视频重定向
7.1.10. VRDP 自定义
7.2. 瞬时转移(Teleporting)
7.3. VBoxHeadless

7.1. 远程显示(VRDP 支持)

Oracle VM VirtualBox 可以远程显示虚拟机,这意味着虚拟机可以在一台计算机上执行,但会在第二台计算机上显示,并从该第二台计算机进行控制,就如同虚拟机在该第二台计算机上运行一样。

为获得最大灵活性,Oracle VM VirtualBox 通过一个通用扩展接口实现远程机器显示,该接口称为 VirtualBox 远程桌面扩展 (VRDE)。基础开源 Oracle VM VirtualBox 软件包仅提供此接口,而实现可以通过第三方提供,并使用 Oracle VM VirtualBox 扩展包,这些扩展包必须与基础包分开安装。请参阅第 1.5 节“安装 Oracle VM VirtualBox 和扩展包”

Oracle 在此类 Oracle VM VirtualBox 扩展包中提供了对 VirtualBox 远程显示协议 (VRDP) 的支持。

VRDP 是 Microsoft 远程桌面协议 (RDP) 的向后兼容扩展。因此,您可以使用任何标准 RDP 客户端来控制远程虚拟机。

即使安装了扩展,VRDP 服务器默认也是禁用的。您可以轻松地为每个虚拟机启用它,无论是从 VirtualBox 管理器中的显示设置(请参阅第 3.6 节“显示设置”),还是使用 VBoxManage 命令,如下所示

$ VBoxManage modifyvm VM-name --vrde on

默认情况下,VRDP 服务器使用 TCP 端口 3389。如果您运行多个 VRDP 服务器,则需要更改默认端口,因为该端口一次只能由一个服务器使用。您可能还需要在 Windows 主机上更改它,因为默认端口可能已被 Windows 内置的 RDP 服务器使用。端口 5000 到 5050 通常未使用,可能是一个不错的选择。

该端口可以在图形用户界面的显示设置中更改,或者使用 VBoxManage modifyvm 命令的 --vrde-port 选项。您可以指定一个逗号分隔的端口列表或端口范围。在两个端口号之间使用短划线来指定一个范围。VRDP 服务器将绑定到指定列表中的一个可用端口。例如,VBoxManage modifyvm VM-name --vrde-port 5000,5010-5012 将服务器配置为绑定到端口 5000、5010、5011 或 5012 之一。请参阅第 8.10 节“VBoxManage modifyvm”

正在运行的虚拟机实际使用的端口可以通过 VBoxManage showvminfo 命令查询,或者在 VirtualBox 管理器中、虚拟机关的机器菜单中可访问的会话信息对话框的运行时选项卡上查看。

Oracle VM VirtualBox 支持 IPv6。如果主机操作系统支持 IPv6,VRDP 服务器将除了 IPv4 连接外,自动监听 IPv6 连接。

7.1.1. 常用第三方 RDP 查看器

由于 VRDP 向后兼容 RDP,您可以使用任何标准 RDP 查看器连接到此类远程虚拟机。为此,您必须指定主机系统的 IP 地址作为要连接的服务器地址,而不是虚拟机的 IP 地址。您还必须指定 VRDP 服务器正在使用的端口号。

以下示例适用于最常见的 RDP 查看器

  • 在 Windows 上,您可以使用 Windows 自带的 Microsoft 终端服务连接器 mstsc.exe。按下 Windows 键 + R,显示运行对话框。输入 mstsc 启动程序。您也可以在开始所有程序附件远程桌面连接中找到该程序。如果使用运行对话框,可以直接输入选项。例如

    mstsc 1.2.3.4:3389

    如有必要,将 1.2.3.4 替换为主机 IP 地址,将 3389 替换为不同的端口。

    注意

    • IPv6 地址必须用方括号括起来才能指定端口。例如:mstsc [fe80::1:2:3:4]:3389

    • 当连接到 localhost 以测试连接时,使用 mstsc.exe 可能无法使用 localhost127.0.0.1 地址。相反,必须使用 127.0.0.2[:3389] 地址。

  • 在其他系统上,您可以使用标准开源程序 rdesktop。该程序随大多数 Linux 发行版提供。

    使用 rdesktop 时,请使用如下命令行

    $ rdesktop -a 16 -N 1.2.3.4:3389

    如有必要,将 1.2.3.4 替换为主机 IP 地址,将 3389 替换为不同的端口。-a 16 选项请求 16 位每像素的颜色深度,我们推荐使用此设置。为了获得最佳性能,在安装客户机操作系统后,您应该将其显示颜色深度设置为相同的值。-N 选项启用数字键盘(NumPad)按键的使用。

  • 您可以将 Remmina 远程桌面客户端与 VRDP 配合使用。此应用程序包含在某些 Linux 发行版中,例如 Debian 和 Ubuntu。

  • 如果您运行 KDE 桌面,可以使用 krdc,即 KDE RDP 查看器。典型命令行如下

    $ krdc rdp://1.2.3.4:3389

    如有必要,将 1.2.3.4 替换为主机 IP 地址,将 3389 替换为不同的端口。使用 krdc 时,需要 rdp:// 前缀才能将其切换到 RDP 模式。

  • 使用 Sun Ray 瘦客户端时,您可以使用 uttsc,它是 Sun Ray Windows Connector 软件包的一部分。有关详细信息,请参阅 Sun Ray 文档。

7.1.2. VBoxHeadless:远程桌面服务器

虽然从 VirtualBox 管理器启动的任何虚拟机都能够远程运行虚拟机,但如果您根本不想在本地显示虚拟机,那么运行完整的图形用户界面 (GUI) 并不方便。特别是,如果您正在运行专门用于托管虚拟机的服务器硬件,并且所有虚拟机都应该通过 VRDP 远程运行,那么在服务器上安装图形用户界面是毫无意义的。对于 Linux 或 Oracle Solaris 主机尤其如此,因为 VirtualBox 管理器依赖于 Qt 和 SDL 库。如果您根本不想在服务器上安装 X Window 系统,这会带来不便。

因此,Oracle VM VirtualBox 提供了一个名为 VBoxHeadless 的前端,它在主机上不产生任何可见输出,但仍可选择性地提供 VRDP 数据。此前端在 Linux 和 Oracle Solaris 主机上不依赖于 X Window 系统。

注意

在旧版 Oracle VM VirtualBox 中,无头服务器名为 VBoxVRDP。为了向后兼容,Oracle VM VirtualBox 安装仍包含该名称的可执行文件。

要使用 VBoxHeadless 启动虚拟机,您有以下选项

  • 使用 VBoxManage 命令,如下所示

    $ VBoxManage startvm VM-name --type headless

    --type 选项使 Oracle VM VirtualBox 使用 VBoxHeadless 作为内部虚拟化引擎的前端,而不是 Qt 前端。

  • 使用 VBoxHeadless 命令,如下所示

    VBoxHeadless --startvm uuid|vmname

    这种启动虚拟机的方式有助于排查 VBoxManage startvm 报告的问题,因为有时可以看到更详细的错误消息,特别是虚拟机执行启动之前的早期故障。在正常情况下,首选 VBoxManage startvm,因为它直接作为后台进程运行虚拟机,而直接使用 VBoxHeadless 启动时则需要显式执行此操作。该命令的完整文档请参见第 7.3 节“VBoxHeadless”

  • 从 VirtualBox 管理器启动 VBoxHeadless,方法是在启动虚拟机时按下 Shift 键,或从机器菜单中选择无头启动

当您使用 VBoxHeadless 命令启动虚拟机时,VRDP 服务器将根据虚拟机配置启用。您可以使用 --vrde 命令行参数覆盖虚拟机的设置。要启用 VRDP 服务器,请按如下方式启动虚拟机

VBoxHeadless --startvm uuid|vmname --vrde on

要禁用 VRDP 服务器

VBoxHeadless --startvm uuid|vmname --vrde off

要根据虚拟机配置启用 VRDP 服务器,与其他前端一样

VBoxHeadless --startvm uuid|vmname --vrde config

此命令与以下命令相同

VBoxHeadless --startvm uuid|vmname

如果您使用 VBoxManage startvm 启动虚拟机,则始终使用虚拟机的配置设置。

7.1.3. 逐步操作:在无头服务器上创建虚拟机

以下说明描述了如何通过网络连接在无头服务器上创建虚拟机。此示例创建了一个虚拟机,建立了 RDP 连接并安装了客户机操作系统。所有这些任务都无需接触无头服务器即可完成。您需要满足以下先决条件

  • 在一台运行受支持主机操作系统的服务器机器上安装 Oracle VM VirtualBox。必须安装用于 VRDP 服务器的 Oracle VM VirtualBox 扩展包,请参阅第 7.1 节“远程显示(VRDP 支持)”。本过程假设使用 Linux 服务器。

  • 可从服务器访问的 ISO 文件,其中包含要安装的客户机操作系统的安装数据。本示例中使用 Windows XP。

  • 到该主机的终端连接,通过该连接您可以访问命令行,例如 ssh

  • 远程客户端上的 RDP 查看器。有关示例,请参阅第 7.1.1 节“常用第三方 RDP 查看器”

请注意,在服务器机器上,由于我们只使用无头服务器,因此不需要 Qt 和 X Window 系统。

  1. 在无头服务器上,创建新的虚拟机。例如

    VBoxManage createvm --name "Windows XP" --ostype WindowsXP --register

    如果您未指定 --register,则以后必须手动使用 registervm 命令。

    您不需要指定 --ostype,但这样做会为某些虚拟机参数选择一些合理的默认值。例如,RAM 大小和虚拟网络设备的类型。要获取支持的操作系统的完整列表,您可以使用以下命令

    VBoxManage list ostypes
  2. 确保虚拟机的设置与我们将要安装的客户机操作系统相符。例如

    VBoxManage modifyvm "Windows XP" --memory 256 --acpi on --boot1 dvd --nic1 nat
  3. 为虚拟机创建虚拟硬盘。例如,要创建 10 GB 的虚拟硬盘

    VBoxManage createhd --filename "WinXP.vdi" --size 10000
  4. 向新虚拟机添加 IDE 控制器。例如

    VBoxManage storagectl "Windows XP" --name "IDE Controller"
      --add ide --controller PIIX4
  5. 将您创建的 VDI 文件设置为新虚拟机的第一个虚拟硬盘。例如

    VBoxManage storageattach "Windows XP" --storagectl "IDE Controller"
     --port 0 --device 0 --type hdd --medium "WinXP.vdi"
  6. 将包含您稍后要安装的操作系统的 ISO 文件附加到虚拟机。这样做是为了让虚拟机可以从该文件启动。

    VBoxManage storageattach "Windows XP" --storagectl "IDE Controller"
     --port 0 --device 1 --type dvddrive --medium /full/path/to/iso.iso
  7. 按如下方式启用 VirtualBox 远程桌面扩展,即 VRDP 服务器

    VBoxManage modifyvm "Windows XP" --vrde on
  8. 使用 VBoxHeadless 命令启动虚拟机

    VBoxHeadless --startvm "Windows XP"

    如果配置步骤成功,您应该会看到版权声明。如果您返回到命令行,则表示某些操作未正确完成。

  9. 在客户端机器上,启动 RDP 查看器并连接到服务器。有关如何使用各种常用 RDP 查看器的详细信息,请参阅第 7.1.1 节“常用第三方 RDP 查看器”

    您的客户机操作系统的安装程序应该显示在 RDP 查看器中。

7.1.4. 远程 USB

作为 VRDP 支持之外的一项特殊功能,Oracle VM VirtualBox 还支持通过网络远程连接 USB 设备。也就是说,在某台计算机上运行的 Oracle VM VirtualBox 客户机可以访问显示 VRDP 数据的远程计算机上的 USB 设备,就像访问连接到实际主机的 USB 设备一样。这使得在充当服务器的 Oracle VM VirtualBox 主机上运行虚拟机成为可能,客户端可以从其他地方连接,只需要一个网络适配器和一个能够运行 RDP 查看器的显示器。当 USB 设备插入客户端时,远程 Oracle VM VirtualBox 服务器可以访问它们。

对于这些远程 USB 设备,适用与其他 USB 设备相同的筛选规则。请参阅第 3.11.1 节“USB 设置”。您只需在设置这些规则时指定“远程”或“任何”即可。

只有 RDP 客户端支持此扩展时,才能访问远程 USB 设备。某些版本的 uttsc(一个为 Sun Ray 瘦客户端定制的客户端)支持访问远程 USB 设备。未来版本的 Oracle VM VirtualBox 将提供其他平台上的 RDP 客户端。

7.1.5. RDP 身份验证

对于每个可通过 RDP 远程访问的虚拟机,您可以单独确定客户端连接是否以及如何进行身份验证。为此,请使用带有 --vrde-auth-type 选项的 VBoxManage modifyvm 命令。请参阅第 8.10 节“VBoxManage modifyvm”。以下是可用的身份验证方法

  • null 方法意味着完全没有身份验证。任何客户端都可以连接到 VRDP 服务器,从而连接到虚拟机。这非常不安全,仅建议用于专用网络。

  • external 方法通过特殊的身份验证库提供外部身份验证。Oracle VM VirtualBox 附带两个特殊的身份验证库

    1. 默认身份验证库 VBoxAuth 根据主机的用户凭据进行身份验证。根据主机平台的不同,这意味着以下内容

      • 在 Linux 主机上,VBoxAuth.so 根据主机的 PAM 系统对用户进行身份验证。

      • 在 Windows 主机上,VBoxAuth.dll 根据主机的 WinLogon 系统对用户进行身份验证。

      • 在 macOS 主机上,VBoxAuth.dylib 根据主机的目录服务对用户进行身份验证。

      换句话说,外部方法默认使用主机系统上存在的用户帐户执行身份验证。任何具有有效身份验证凭据的用户都将被接受。例如,用户名不必与运行虚拟机的用户对应。

    2. 一个名为 VBoxAuthSimple 的附加库根据虚拟机 XML 设置文件 extradata 部分中配置的凭据执行身份验证。这可能是获得不依赖于正在运行和受支持的客户机的身份验证的最简单方法。需要执行以下步骤

      1. 使用以下命令启用 VBoxAuthSimple

        VBoxManage setproperty vrdeauthlibrary "VBoxAuthSimple"
      2. 要为特定虚拟机启用此库,您必须将身份验证切换为外部,如下所示

        VBoxManage modifyvm VM-name --vrde-auth-type external

        VM-name 替换为虚拟机名称或 UUID。

      3. 然后,您需要通过将项目写入机器的 extradata 中来配置用户和密码。由于需要写入密码的 XML 机器设置文件的 extradata 部分是纯文本文件,因此 Oracle VM VirtualBox 使用哈希值来加密密码。必须使用以下命令

        VBoxManage setextradata VM-name "VBoxAuthSimple/users/user" hash

        VM-name 替换为虚拟机名称或 UUID,将 user 替换为应允许登录的用户名,将 hash 替换为加密后的密码。以下命令示例获取密码 secret 的哈希值

        $ VBoxManage internalcommands passwordhash "secret"
        2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b

        然后,您使用 VBoxManage setextradata 将此值存储在机器的 extradata 部分中。

        作为一个组合示例,要将用户 john 和机器 My VM 的密码设置为 secret,请使用此命令

        VBoxManage setextradata "My VM" "VBoxAuthSimple/users/john"
            2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b
  • guest 身份验证方法使用 Guest Additions 附带的特殊组件执行身份验证。因此,身份验证不是在主机上执行,而是使用客户机用户帐户执行。

    此方法目前仍在测试中,尚不支持。

除了上述方法之外,您还可以将默认的外部身份验证模块替换为任何其他模块。为此,Oracle VM VirtualBox 提供了一个定义良好的接口,使您能够编写自己的身份验证模块。这在 Oracle VM VirtualBox 软件开发工具包 (SDK) 参考中进行了详细描述。请参阅第 11 章《Oracle VM VirtualBox 编程接口》

7.1.6. RDP 加密

RDP 具有数据流加密功能,该功能基于 RC4 对称密码,密钥长度可达 128 位。RC4 密钥会定期更换,每 4096 个数据包更换一次。

RDP 提供以下不同的身份验证方法

  • RDP 4 身份验证是历史上使用的。使用 RDP 4 时,RDP 客户端不执行任何检查来验证其连接的服务器的身份。由于用户凭据可以通过中间人 (MITM) 攻击获取,因此 RDP4 身份验证不安全,通常不应使用。

  • RDP 5.1 身份验证采用服务器证书,客户端拥有该证书的公钥。这样可以保证服务器拥有相应的私钥。然而,由于此硬编码的私钥在几年前已公开,因此 RDP 5.1 身份验证也不安全。

  • RDP 5.2 或更高版本的身份验证使用增强型 RDP 安全性,这意味着使用外部安全协议来保护连接。RDP 4 和 RDP 5.1 使用标准 RDP 安全性。VRDP 服务器支持使用 TLS 协议的增强型 RDP 安全性,并作为 TLS 握手的一部分,将服务器证书发送给客户端。

    The Security/Method VRDE 属性设置所需的安全性方法,用于连接。有效值如下

    • 协商 (Negotiate)。允许增强型 (TLS) 和标准 RDP 安全连接。安全性方法与客户端协商。这是默认设置。

    • RDP。只接受标准 RDP 安全性。

    • TLS。只接受增强型 RDP 安全性。客户端必须支持 TLS。

      Oracle VM VirtualBox 使用的 OpenSSL 版本支持 TLS 1.0、1.1、1.2 和 1.3 版本。

    例如,以下命令使客户端能够使用标准或增强型 RDP 安全连接

    vboxmanage modifyvm VM-name --vrde-property "Security/Method=negotiate"

    如果将 Security/Method 属性设置为 Negotiate 或 TLS,则如果客户端支持 TLS,服务器将自动使用 TLS 协议。但是,为了使用 TLS,服务器必须拥有服务器证书、服务器私钥和证书颁发机构 (CA) 证书。以下示例展示如何生成服务器证书。

    1. 创建 CA 自签名证书。

      openssl req -new -x509 -days 365 -extensions v3_ca \
        -keyout ca_key_private.pem -out ca_cert.pem
    2. 生成服务器私钥和签名请求。

      openssl genrsa -out server_key_private.pem
      openssl req -new -key server_key_private.pem -out server_req.pem
    3. 生成服务器证书。

      openssl x509 -req -days 365 -in server_req.pem \
        -CA ca_cert.pem -CAkey ca_key_private.pem -set_serial 01 -out server_cert.pem

    必须将服务器配置为访问所需文件。例如

    vboxmanage modifyvm VM-name \
      --vrde-property "Security/CACertificate=path/ca_cert.pem"
    vboxmanage modifyvm VM-name \
      --vrde-property "Security/ServerCertificate=path/server_cert.pem"
    vboxmanage modifyvm VM-name \
      --vrde-property "Security/ServerPrivateKey=path/server_key_private.pem"

由于连接到服务器的客户端决定使用何种加密类型,因此对于 Linux RDP 查看器 rdesktop,请使用 -4-5 选项。

7.1.7. VRDP 服务器的多重连接

Oracle VM VirtualBox 的 VRDP 服务器支持来自不同客户端对同一运行虚拟机的多个并发连接。所有连接的客户端都看到相同的屏幕输出,并共享鼠标指针和键盘焦点。这类似于多个人同时使用同一台计算机,轮流使用键盘。

以下命令启用多重连接模式

VBoxManage modifyvm VM-name --vrde-multi-con on

7.1.8. 多个远程显示器

要访问两个或更多远程虚拟机显示器,您必须启用 VRDP 多连接模式。请参阅第 7.1.7 节“VRDP 服务器的多重连接”

RDP 客户端可以使用 domain 登录参数 (-d) 选择要连接的虚拟显示器编号。如果参数以 @ 后跟一个数字结尾,Oracle VM VirtualBox 会将此数字解释为屏幕索引。主要客户机屏幕选择 @1,第一个辅助屏幕是 @2,依此类推。

Microsoft RDP 6 客户端不允许您指定单独的域名称。相反,请在用户名字段中输入 domain\username。例如,@2\namename 必须提供,如果 VRDP 服务器设置为需要凭据,则必须是用于登录的名称。如果不是,您可以将任何文本用作用户名。

7.1.9. VRDP 视频重定向

VRDP 服务器可以将视频流从客户机重定向到 RDP 客户端。视频帧使用 JPEG 算法压缩,与标准 RDP 位图压缩方法相比,可以实现更高的压缩比。可以通过降低视频质量来提高压缩比。

VRDP 服务器会自动将客户机中的视频流检测为频繁更新的矩形区域。因此,此方法适用于任何客户机操作系统,无需在客户机中安装额外软件。特别是,不需要 Guest Additions。

然而,在客户端方面,目前只有 Windows 7 远程桌面连接客户端支持此功能。如果客户端不支持视频重定向,VRDP 服务器会回退到常规位图更新。

以下命令启用视频重定向

VBoxManage modifyvm VM-name --vrde-video-channel on

视频质量定义为 10 到 100 之间的百分比值,表示 JPEG 压缩级别,其中数字越低表示质量越低但压缩率越高。可以使用以下命令更改质量

VBoxManage modifyvm VM-name --vrde-video-channel-quality 75

7.1.10. VRDP 自定义

您可以在 VRDP 服务器中单独禁用显示输出、鼠标和键盘输入、音频、远程 USB 或剪贴板。

以下命令更改相应的服务器设置

$ VBoxManage modifyvm VM-name --vrde-property Client/DisableDisplay=1
$ VBoxManage modifyvm VM-name --vrde-property Client/DisableInput=1
$ VBoxManage modifyvm VM-name --vrde-property Client/DisableUSB=1
$ VBoxManage modifyvm VM-name --vrde-property Client/DisableAudio=1
$ VBoxManage modifyvm VM-name --vrde-property Client/DisableClipboard=1
$ VBoxManage modifyvm VM-name --vrde-property Client/DisableUpstreamAudio=1

要重新启用某功能,请使用类似命令,但去掉末尾的 1。例如

$ VBoxManage modifyvm VM-name --vrde-property Client/DisableDisplay=

7.2. 瞬时转移(Teleporting)

Oracle VM VirtualBox 支持瞬时转移。瞬时转移是指在虚拟机运行时,通过网络将虚拟机从一个 Oracle VM VirtualBox 主机移动到另一个主机。这无论主机上运行何种操作系统都有效。例如,您可以在 Oracle Solaris 和 macOS 主机之间瞬时转移虚拟机。

瞬时转移要求一台机器当前正在一个主机(称为源主机)上运行。虚拟机将瞬时转移到的主机称为目标主机。然后将目标主机上的机器配置为等待源主机联系目标主机。机器的运行状态将以最小的停机时间从源主机传输到目标主机。

瞬时转移通过任何 TCP/IP 网络进行。源主机和目标主机只需在瞬时转移设置中指定一个 TCP/IP 端口,并就此达成一致即可。

目前,要使其正常工作,需要满足以下几个先决条件

  • 在目标主机上,您必须在 Oracle VM VirtualBox 中配置一个与您要瞬时转移的源主机上的机器具有完全相同硬件设置的虚拟机。这不适用于仅仅是描述性的设置,例如虚拟机名称,但显然,为了使瞬时转移成功,目标机器必须具有相同的内存量和其他硬件设置。否则,瞬时转移将失败并显示错误消息。

  • 源主机和目标主机上的两个虚拟机必须共享相同的存储,包括硬盘、软盘和 CD/DVD 映像。这意味着它们要么使用相同的 iSCSI 目标,要么存储位于网络上的某个位置,并且两个主机都可以使用 NFS 或 SMB/CIFS 访问它。

    这也意味着源主机和目标机器都不能有任何快照。

要配置瞬时转移,请执行以下步骤

  1. 目标主机上,将虚拟机配置为在启动时等待瞬时转移请求到达,而不是实际尝试启动机器。这通过以下 VBoxManage 命令完成

    VBoxManage modifyvm targetvmname --teleporter on --teleporter-port port

    targetvmname 是目标主机上虚拟机的名称,port 是在源主机和目标主机上使用的 TCP/IP 端口号。例如,使用 6000。请参阅第 8.10 节“VBoxManage modifyvm”

  2. 在目标主机上启动虚拟机。虚拟机不会运行,而是显示一个进度对话框,指示它正在等待瞬时转移请求的到来。

  3. 照常在主机上启动虚拟机。当它正在运行并且您想要进行瞬时转移时,在源主机上发出以下命令

    VBoxManage controlvm sourcevmname teleport --host targethost --port port

    其中 sourcevmname 是源主机上虚拟机的名称,即当前正在运行的机器。targethost 是目标主机的宿主或 IP 名称,机器正在该主机上等待瞬时转移请求,port 必须与目标主机命令中指定的数字相同。请参阅第 8.20 节“VBoxManage controlvm”

为了测试,您也可以在同一主机上瞬时转移机器。在这种情况下,在源主机和目标主机上都使用 localhost 作为主机名。

注意

在极少数情况下,如果源主机和目标主机的 CPU 差异很大,瞬时转移可能会失败并显示错误消息,或者目标主机可能会挂起。这种情况尤其可能发生在虚拟机正在运行高度优化以在特定 CPU 上运行的应用程序软件,但未正确检查某些 CPU 功能是否实际存在时。Oracle VM VirtualBox 会过滤呈现给客户机操作系统的 CPU 功能。高级用户可以尝试使用 VBoxManage modifyvm --cpuid-portability-level 命令限制这些虚拟 CPU 功能。请参阅第 8.10 节“VBoxManage modifyvm”

7.3. VBoxHeadless

Oracle VM VirtualBox 远程桌面服务器。

概要

VBoxHeadless [--startvm= [ uuid | 虚拟机名称 ]] [--vrde= on | off | config ] [--vrdeproperty=属性名称=[属性值]] [--settingspw=[密码]] [--settingspwfile=密码文件] [--start-paused=虚拟机名称] [--capture] [--width=宽度] [--height=高度] [--bitrate=比特率] [--filename=文件名]

描述

VBoxHeadless 命令是一个替代前端,使您能够远程管理虚拟机 (VM)。该前端是一个命令行界面 (CLI),而不是 VirtualBox 管理器图形用户界面 (GUI)。

有关使用此命令的信息,请参阅第 7.1.2 节“VBoxHeadless:远程桌面服务器”

命令选项

--startvm=uuid | 虚拟机名称

指定要启动的虚拟机的全局唯一标识符 (UUID) 或名称。

使用 VBoxManage list vms 命令获取虚拟机信息。

此选项的缩写形式是 -s-startvm

--vrde=on | off | config

指定如何使用 VRDP 服务器。默认值为 config。有效值如下

  • on 启用 VRDP 服务器。

    VBoxHeadless --startvm=vmname --vrde=on
  • off 禁用 VRDP 服务器。

    VBoxHeadless --startvm=vmname --vrde=off
  • config 根据虚拟机配置启用 VRDP 服务器。

    VBoxHeadless --startvm=vmname --vrde=config

此选项的缩写形式是 -v

--vrdeproperty=属性名称=属性值

指定以下属性之一的值

  • TCP/Ports 属性值是一个逗号分隔的端口列表,VRDE 服务器可以绑定到这些端口。在两个端口号之间使用连字符 (-) 来指定一个端口范围。

  • TCP/Address 属性值是 VRDE 服务器要绑定的接口 IP 地址。

--settingspw=[密码]

指定用于访问加密设置的设置密码。如果您未在命令行上指定密码,VBoxHeadless 将提示您输入密码。

--settingspwfile=密码文件

指定包含设置密码的文件。

--start-paused=虚拟机名称

以暂停状态启动指定的虚拟机。

--capture

将虚拟机屏幕输出录制到文件。除了此选项外,您必须使用 --filename 选项指定文件名。

--width=宽度

指定录制的帧宽度(像素)。此选项与 --capture 选项相关联。

--height=高度

指定录制的帧高度(像素)。此选项与 --capture 选项相关联。

--bitrate=比特率

指定录制的比特率(千比特每秒)。此选项与 --capture 选项相关联。

--filename=文件名

指定存储录制内容的文件名。使用的编解码器基于您选择的文件扩展名。如果您使用 --capture 选项,则必须指定此选项。

示例

以下命令启动 ol7u4 虚拟机

$ VBoxHeadless --startvm "ol7u4"

以下命令以暂停状态启动 ol7u6 虚拟机。

$ VBoxHeadless --startvm "ol7u6" --start-paused

以下命令启动 ol7u6 虚拟机并录制会话。录制内容将保存到 ol7u6-recording WebM 文件。

$ VBoxHeadless --startvm "ol7u6" --capture --filename ol7u6-recording.webm