Red Hat Training

A Red Hat training course is available for RHEL 8

2.4. 连接至虚拟机

要在 RHEL 8 中与虚拟机(VM)交互,您需要通过以下方法之一连接它:

如果您要连接的虚拟机位于远程主机而不是本地主机,您可以选择配置您的系统以更方便地访问远程主机

先决条件

2.4.1. 使用 web 控制台与虚拟机交互

要在 RHEL 8 web 控制台中与虚拟机(VM)交互,您需要连接到虚拟机的控制台。这包括图形和串行控制台。

2.4.1.1. 在 web 控制台中查看虚拟机图形控制台

使用虚拟机(VM)控制台界面,您可以在 RHEL 8 web 控制台中查看所选虚拟机的图形输出。

先决条件

流程

  1. Virtual Machines 界面中,单击您要查看其图形控制台的虚拟机。

    此时将打开一个新页面,其中包含虚拟机的 OverviewConsole 部分。

  2. 在控制台下拉菜单中选择 VNC 控制台

    VNC 控制台在 Web 界面中的菜单下方显示。

    图形控制台会出现在 web 界面中。

    显示所选虚拟机的界面的图像。
  3. 单击 Expand

    现在,您可以使用鼠标和键盘与虚拟机控制台进行交互,其方式与您与真实机器进行交互的方式相同。VM 控制台中的显示反映了虚拟机上正在执行的操作。

注意

运行 web 控制台的主机可能会截获特定的组合键,如 Ctrl+Alt+Del,阻止它们发送到虚拟机。

要发送此类组合键,请单击 Send key 菜单并选择要发送的键序列。

例如,要将 Ctrl+Alt+Del 组合发送给虚拟机,请单击 Send key 并选择 Ctrl+Alt+Del 菜单条目。

故障排除

  • 如果在图形控制台中点击没有任何效果,请将控制台扩展为全屏。这是一个已知的鼠标光标偏移问题。

2.4.1.2. 使用 Web 控制台在远程 viewer 中查看图形控制台

使用 web 控制台界面,您可以在远程查看器(如 Virt Viewer)中显示所选虚拟机(VM)的图形控制台。

注意

您可以在 web 控制台中启动 Virt Viewer。可以手动启动其他 VNC 和 SPICE remote viewer。

先决条件

  • Web 控制台 VM 插件 已安装在您的系统上
  • 确保主机和虚拟机支持图形界面。
  • 在 Virt Viewer 中查看图形控制台前,您必须在 web 控制台连接的机器上安装 Virt Viewer。

    1. 单击 Launch remote viewer

      virt viewer .vv、文件下载。

    2. 打开文件以启动 Virt Viewer。
注意

远程查看器在大多数操作系统上提供。但是,一些浏览器扩展和插件不允许 Web 控制台打开 Virt Viewer。

流程

  1. Virtual Machines 界面中,单击您要查看其图形控制台的虚拟机。

    此时将打开一个新页面,其中包含虚拟机的 OverviewConsole 部分。

  2. 在控制台下拉菜单中选择 Desktop Viewer

    显示虚拟机接口控制台部分以及其他虚拟机详细信息的页面。
  3. 点击 Launch Remote Viewer

    图形控制台在 Virt Viewer 中打开。

    您可以使用鼠标和键盘与虚拟机控制台以与实际机器交互的方式与 VM 控制台进行交互。VM 控制台中的显示反映了虚拟机上正在执行的操作。

注意

运行 web 控制台的服务器可以截获特定的组合键,如 Ctrl+Alt+Del,阻止它们发送到虚拟机。

要发送这样的组合键,点 Send key 菜单并选择要使用地键序列。

例如:要将 Ctrl+Alt+Del 组合发送到 VM,点 Send key 菜单并选择 Ctrl+Alt+Del 菜单。

故障排除

  • 如果在图形控制台中点击没有任何效果,请将控制台扩展为全屏。这是一个已知的鼠标光标偏移问题。
  • 如果在 web 控制台中启动 Remote Viewer 不起作用或者不佳,您可以使用以下协议手动与任何 viewer 应用程序连接:

    • Address - 默认地址为 127.0.0.1。您可以修改 /etc/libvirt/qemu.conf 中的 vnc_listenspice_listen 参数,以将其更改为主机的 IP 地址。
    • SPICE port - 5900
    • VNC port - 5901

2.4.1.3. 在 web 控制台中查看虚拟机串口控制台

您可以在 RHEL 8 web 控制台中查看所选虚拟机(VM)的串行控制台。这在主机机器或者虚拟机没有使用图形界面配置时很有用。

有关串行控制台的更多信息,请参阅 打开虚拟机串口控制台

先决条件

流程

  1. Virtual Machines 窗格中,单击您要查看其串行控制台的虚拟机。

    此时将打开一个新页面,其中包含虚拟机的 OverviewConsole 部分。

  2. 在控制台下拉菜单中选择 Serial console

    图形控制台会出现在 web 界面中。

    显示虚拟机串行控制台以及其他虚拟机详细信息的页面。

您可以断开串行控制台与虚拟机的连接和重新连接。

  • 要断开串行控制台与虚拟机的连接,请点 Disconnect
  • 要将串行控制台重新连接到虚拟机,请点 Reconnect

2.4.2. 使用 Virt Viewer 打开虚拟机图形控制台

要连接到 KVM 虚拟机(VM)的图形控制台并在 Virt Viewer 桌面应用程序中打开它,请按照以下流程操作。

先决条件

  • 您的系统以及您要连接的虚拟机必须支持图形显示。
  • 如果目标虚拟机位于远程主机上,则需要对主机有连接和 root 访问权限。
  • 可选: 如果目标虚拟机位于远程主机上,请设置 libvirt 和 SSH 以更方便地访问远程主机

流程

  • 要连接到本地虚拟机,请使用以下命令,并将 guest-name 替换为您要连接的虚拟机的名称:

    # virt-viewer guest-name
  • 要连接到远程虚拟机,请使用 virt-viewer 命令及 SSH 协议。例如,以下命令以 root 身份连接到位于远程系统 10.0.0.1 的名为 guest-name 的虚拟机。此连接还需要为 10.0.0.1 进行 root 身份验证。

    # virt-viewer --direct --connect qemu+ssh://root@10.0.0.1/system guest-name
    root@10.0.0.1's password:

验证

如果连接正常工作,则虚拟机将显示在 Virt Viewer 窗口中。

您可以使用鼠标和键盘与虚拟机控制台以与实际机器交互的方式与 VM 控制台进行交互。VM 控制台中的显示反映了虚拟机上正在执行的操作。

故障排除

  • 如果在图形控制台中点击没有任何效果,请将控制台扩展为全屏。这是一个已知的鼠标光标偏移问题。

2.4.3. 使用 SSH 连接到虚拟机

要使用 SSH 连接协议与虚拟机(VM)的终端交互,请遵循以下步骤。

先决条件

  • 有对目标虚拟机的网络连接和 root 访问权限。
  • 如果目标虚拟机位于远程主机上,您也可以拥有对该主机的连接和 root 访问权限。
  • 您的虚拟机网络由 libvirt 生成的 dnsmasq 分配 IP 地址。这是 libvirt NAT 网络 中的示例。

    值得注意的是,如果虚拟机使用以下网络配置之一,则无法使用 SSH 连接到虚拟机:

    • hostdev 接口
    • 直接接口
    • 网桥间
  • 在虚拟机主机上已安装并启用了 libvirt-nss 组件。如果没有,请执行以下操作:

    1. 安装 libvirt-nss 软件包:

      # yum install libvirt-nss
    2. 编辑 /etc/nsswitch.conf 文件,并将 libvirt_guest 添加到 hosts 行中:

      [...]
      passwd:      compat
      shadow:      compat
      group:       compat
      hosts:       files libvirt_guest dns
      [...]

流程

  1. 当连接到远程虚拟机时,请首先 SSH 到其物理主机。以下示例演示了使用其 root 凭证连接到主机 10.0.0.1:

    # ssh root@10.0.0.1
    root@10.0.0.1's password:
    Last login: Mon Sep 24 12:05:36 2021
    root~#
  2. 使用虚拟机的名称和用户访问凭证来连接它。例如,以下命令使用其 root 凭证连接到 testguest1 虚拟机:

    # ssh root@testguest1
    root@testguest1's password:
    Last login: Wed Sep 12 12:05:36 2018
    root~]#

故障排除

  • 如果您不知道虚拟机的名称,可以使用 virsh list --all 命令列出主机上所有可用的虚拟机:

    # virsh list --all
    Id    Name                           State
    ----------------------------------------------------
    2     testguest1                    running
    -     testguest2                    shut off

其它资源

2.4.4. 打开虚拟机串口控制台

使用 virsh console 命令,可以连接到虚拟机的串行控制台(VM)。

但虚拟机有以下情况时很有用:

  • 没有提供 VNC 或 SPICE 协议,因此没有为 GUI 工具提供视频显示。
  • 没有网络连接,因此无法使用 SSH 进行交互。

先决条件

  • 虚拟机必须配有一个串口控制台设备,如 console type='pty'。要进行验证,请执行以下操作:

    # virsh dumpxml vm-name | grep console
    
    <console type='pty' tty='/dev/pts/2'>
    </console>
  • 虚拟机必须在内核命令行中配置串口控制台。要进行验证,VM 上的 cat /proc/cmdline 命令输出应包含 console=ttyS0 。例如:

    # cat /proc/cmdline
    BOOT_IMAGE=/vmlinuz-3.10.0-948.el7.x86_64 root=/dev/mapper/rhel-root ro console=tty0 console=ttyS0,9600n8 rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb

    如果没有在虚拟机中正确设置串口控制台,请使用 virsh 控制台连接到虚拟机,请将您连接到无响应的客户端控制台。但是,您仍然可以使用 Ctrl+] 快捷键退出无响应控制台。

    • 要在虚拟机上设置串行控制台,请执行以下操作:

      1. 在虚拟机上启用 console=ttyS0 内核选项:

        # grubby --update-kernel=ALL --args="console=ttyS0"
      2. 清除可能会阻止更改生效的内核选项。

        # grub2-editenv - unset kernelopts
      3. 重启虚拟机。

流程

  1. 在您的主机系统上,使用 virsh console 命令。如果 libvirt 驱动程序支持安全控制台处理,以下示例连接到 guest1 虚拟机:

    # virsh console guest1 --safe
    Connected to domain 'guest1'
    Escape character is ^]
    
    Subscription-name
    Kernel 3.10.0-948.el7.x86_64 on an x86_64
    
    localhost login:
  2. 您还可以使用与标准命令行界面相同的方法与 virsh 控制台互动。

其它资源

  • virsh 手册页

2.4.5. 设置对远程虚拟化主机的简单访问

当使用 libvirt 工具在远程主机系统上管理虚拟机时,建议使用 -c qemu+ssh://root@hostname/system 语法。例如,要在 10.0.0.1 主机上以 root 用户身份使用 virsh list 命令:

# virsh -c qemu+ssh://root@10.0.0.1/system list

root@10.0.0.1's password:

Id   Name              State
---------------------------------
1    remote-guest      running

然而,为方便起见,您可以通过修改 SSH 和 libvirt 配置来完全删除需要指定连接详情。例如,您可以:

# virsh -c remote-host list

root@10.0.0.1's password:

Id   Name              State
---------------------------------
1    remote-guest      running

要进行改进,请按照以下步骤操作。

流程

  1. 编辑或创建 ~/.ssh/config 文件,并添加以下内容,其中 host-alias 是与特定的远程主机相关联的短名称,hosturl 是主机的 URL 地址。

    Host host-alias
            User                    root
            Hostname                hosturl

    例如,下面的命令为 root@10.0.0.1 设置 tyrannosaurus 别名:

    Host tyrannosaurus
            User                    root
            Hostname                10.0.0.1
  2. 编辑或创建 /etc/libvirt/libvirt.conf 文件,并添加以下内容,其中 qemu-host-alias 是 QEMU 和 libvirt 工具将与预期主机关联的主机别名:

    uri_aliases = [
      "qemu-host-alias=qemu+ssh://host-alias/system",
    ]

    例如,以下命令使用上一步中配置的 tyrannosaurus 别名来设置 t-rex 别名,它代表 qemu+ssh://10.0.0.1/system

    uri_aliases = [
      "t-rex=qemu+ssh://tyrannosaurus/system",
    ]

验证

  1. 确认通过在本地系统上使用基于 libvirt 的工具,并添加 -c qemu-host-alias 参数,您可以来管理远程虚拟机。这会在远程主机中使用 SSH 自动执行命令。

    例如,验证以下列出的在 10.0.0.1 远程主机上的虚拟机,在上一步中将连接设为 t-rex

    $ virsh -c t-rex list
    
    root@10.0.0.1's password:
    
    Id   Name              State
    ---------------------------------
    1    velociraptor      running
    注意

    除了 virsh 之外,-c (或 --connect)选项以及上述远程主机访问配置也可以由以下工具使用:

后续步骤

  • 如果要在单一远程主机中只使用 libvirt 工具,您也可以为基于 libvirt 的实用程序设置特定的连接作为默认目标。为此,请编辑 /etc/libvirt/libvirt.conf 文件,并将 uri_default 参数的值设为 qemu-host-alias。例如:以下命令使用在前面的步骤中设置的 t-rex 主机别名作为默认的 libvirt 目标。

    # These can be used in cases when no URI is supplied by the application
    # (@uri_default also prevents probing of the hypervisor driver).
    #
    uri_default = "t-rex"

    因此,所有基于 libvirt 的命令都会在指定的远程主机中自动执行。

    $ virsh list
    root@10.0.0.1's password:
    
    Id   Name              State
    ---------------------------------
    1    velociraptor      running

    但是,如果您也要管理本地主机或不同远程主机上的虚拟机,则不建议这样做。

  • 当连接到远程主机时,您可以避免向远程系统提供 root 密码。要做到这一点,请使用以下一个或多个方法:

  • -c (或 --connect)选项可用于在远程主机上运行 virt-installvirt-viewervirshvirt-manager 命令。