远程虚拟机

远程显示 (VRDP 支持)

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

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

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

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

即使安装了扩展,VRDP 服务器也默认禁用。您可以轻松地为每个虚拟机启用它,可以从 VirtualBox Manager显示设置中启用(请参阅显示设置),或使用 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 中的一个。请参阅VBoxManage modifyvm

正在运行的虚拟机所使用的实际端口可以通过 VBoxManage showvminfo 命令查询,或在 VirtualBox Manager 中,通过虚拟机窗口的控制菜单访问的会话信息对话框的运行时选项卡中查看。

Oracle VirtualBox 支持 IPv6。如果主机操作系统支持 IPv6,VRDP 服务器将自动侦听 IPv6 连接以及 IPv4 连接。

常见第三方 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 选项启用数字键盘键的使用。

  • 您可以将 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 连接器软件包的一部分。有关详细信息,请参阅 Sun Ray 文档。

VBoxHeadless,远程桌面服务器

虽然从 VirtualBox Manager 启动的任何虚拟机都能够远程运行虚拟机,但如果您一开始就不希望虚拟机在本地显示,则运行完整的图形用户界面并不方便。特别是,如果您运行的服务器硬件的唯一目的是托管虚拟机,并且所有虚拟机都应该通过 VRDP 远程运行,那么在服务器上拥有图形用户界面完全没有意义。对于 Linux 或 Oracle Solaris 主机尤其如此,因为 VirtualBox Manager 依赖于 Qt 和 SDL 库。如果您根本不想在服务器上使用 X Window 系统,这会带来不便。

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

注意

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

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

  • 使用 VBoxManage 命令,如下所示:

    $ VBoxManage startvm VM-name --type headless

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

  • 使用 VBoxHeadless 命令,如下所示:

    VBoxHeadless --startvm uuid|vmname
                            

    这种启动虚拟机的方式有助于排查 VBoxManage startvm 报告的问题,因为有时可以看到更详细的错误消息,特别是虚拟机执行启动之前的早期故障。在正常情况下,首选 VBoxManage startvm,因为它直接将虚拟机作为后台进程运行,而直接使用 VBoxHeadless 启动时则需要明确地进行此操作。

  • VirtualBox Manager 启动 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 启动虚拟机,则始终使用虚拟机的配置设置。

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

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

  • 在具有受支持的主机操作系统的服务器机器上安装 Oracle VirtualBox。必须安装用于 VRDP 服务器的 Oracle VirtualBox Extension Pack,请参阅远程显示(VRDP 支持)。这些步骤假定使用 Linux 服务器。

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

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

  • 远程客户端上的 RDP 查看器。有关示例,请参阅常见第三方 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 查看器的详细信息,请参阅常见第三方 RDP 查看器

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

独立模式

分离模式是本地和远程虚拟机的替代前端。分离模式基于 VBoxHeadless 前端,但使用 VirtualBox Manager 用户界面来控制和显示虚拟机,而不是 RDP 查看器程序。分离模式不需要 VirtualBox 远程桌面扩展 (VRDE)。

分离模式使客户机图形用户界面能够轻松地附加和分离正在运行的虚拟机。拥有多个正在运行的虚拟机的用户可以使用分离模式来显示所需的虚拟机,同时将所有其他虚拟机保持在后台直到需要时再显示。

与使用 VBoxHeadless 前端相比,分离模式具有一些安全优势。

使用分离模式

以下列表描述了分离模式下的一些典型操作。

  • 要在分离模式下启动虚拟机:

    VirtualBox Manager 的机器列表中右键单击虚拟机名称,然后在启动子菜单中选择可分离启动

  • 要在分离模式下从虚拟机分离

    在虚拟机的控制菜单中,选择分离 GUI

  • 要在分离模式下附加到虚拟机:

    VirtualBox Manager 的机器列表中右键单击虚拟机名称,然后选择显示

  • 停止在分离模式下运行的虚拟机:

    VirtualBox Manager 的机器列表中右键单击虚拟机名称,然后在停止菜单中选择一个选项。

远程 USB

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

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

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

RDP 认证

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

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

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

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

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

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

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

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

    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 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 身份验证方法使用客户机增强功能附带的特殊组件执行身份验证。因此,身份验证不是在主机上执行,而是在客户机用户帐户上执行。

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

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

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 握手的一部分,将服务器证书发送给客户端。

    Security/Method VRDE 属性设置连接所需的安全性方法。您也可以在虚拟机设置的“远程显示”选项卡中更改此设置。有效值如下:

    • 协商 (Negotiate)。允许增强型 (TLS) 和标准 RDP 安全连接。安全方法与客户端协商。

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

    • TLS。仅接受增强型 RDP 安全性。客户端必须支持 TLS。这是默认设置。

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

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

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

    如果 Security/Method 属性设置为“协商”或“TLS”,则如果客户端支持 TLS,服务器将使用 TLS。但是,要使用 TLS,服务器必须拥有服务器证书和服务器私钥。证书颁发机构 (CA) 证书是可选的。

    如果您选择 TLS 作为安全方法,Oracle VirtualBox 将为虚拟机生成一个服务器密钥和证书对(名为 VRDEAutoGeneratedPrivateKey.pem 和 VRDEAutoGeneratedCert.pem)。如果自动生成的证书和密钥即将过期,或者其中一个或两个被删除或损坏,Oracle VirtualBox 还会重新创建它们。

    要生成自定义服务器密钥和证书对以及 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"

    请注意,Oracle VirtualBox 不维护自定义证书。您负责保持这些证书的更新。

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

到 VRDP 服务器的多个连接

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

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

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

多个远程显示器

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

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

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

VRDP 视频重定向

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

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

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

以下命令启用视频重定向

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

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

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

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=

瞬时移动

Oracle VirtualBox 支持“传送”(teleporting)。传送是指在虚拟机运行时,通过网络将虚拟机从一个 Oracle VirtualBox 主机移动到另一个主机。无论主机上运行何种主机操作系统,此功能都有效。例如,您可以在 Oracle Solaris 和 macOS 主机之间传送虚拟机。

传送要求一台机器当前在一个主机上运行,该主机称为“”(source)。虚拟机将被传送到的主机称为“目标”(target)。然后,目标上的机器被配置为等待源联系目标。机器的运行状态将以最小的停机时间从源传输到目标。

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

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

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

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

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

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

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

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

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

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

  3. 照常在主机上启动虚拟机。当它正在运行并且您希望将其传送时,请在源主机上发出以下命令:

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

    其中 sourcevmname 是源主机上虚拟机的名称,即当前正在运行的机器。targethost 是目标主机的 IP 名称或主机名,机器在该主机上等待传送请求,并且 port 必须与目标主机上的命令中指定的数字相同。请参阅VBoxManage controlvm

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

注意

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

VBoxHeadless

Oracle VirtualBox 远程桌面服务器

概要

VBoxHeadless [‑‑startvm=<uuid | vmname>] [‑‑vrde=on | off | config] [‑‑vrdeproperty=prop‑name= [prop‑value]] [‑‑settingspw=password] [‑‑settingspwfile=password‑file] [‑‑start‑paused] [‑‑capture] [‑‑width=width] [‑‑height=height] [‑‑bitrate=bit‑rate] [‑‑filename=filename]

描述

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

有关使用此命令的信息,请参阅VBoxHeadless,远程桌面服务器

命令选项

--startvm=uuid | 虚拟机名称

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

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

此选项的缩写是 -s

--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