搜索

2.4. 连接至虚拟机

download PDF

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

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

先决条件

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

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

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

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

先决条件

流程

  1. 登录到 RHEL 8 web 控制台。

    详情请参阅 登录到 web 控制台

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

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

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

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

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

  4. 单击 Expand

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

注意

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

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

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

故障排除

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

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

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

注意

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

先决条件

  • 已安装 RHEL 8 web 控制台。

    具体步骤请参阅安装并启用 Web 控制台

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

    1. 单击 Launch remote viewer

      virt viewer .vv、文件下载。

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

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

流程

  1. 登录到 RHEL 8 web 控制台。

    详情请参阅 登录到 web 控制台

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

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

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

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

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

    您可以使用鼠标和键盘与虚拟机控制台以与实际机器交互的方式与虚拟机控制台交互。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. 登录到 RHEL 8 web 控制台。

    详情请参阅 登录到 web 控制台

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

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

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

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

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

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

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

2.4.1.4. 在 web 控制台中使用 VNC 替换 SPICE 远程显示协议

SPICE 远程显示协议在 RHEL 8 中已弃用,并将在 RHEL 9 中删除。如果您的虚拟机(VM)配置为使用 SPICE 协议,您可以使用 web 控制台将 SPICE 协议替换为 VNC 协议。但是,某些 SPICE 设备(如音频和 USB 透传)将从虚拟机中删除,因为它们在 VNC 协议中没有合适的替换。

重要

默认情况下,RHEL 8 虚拟机被配置为使用 SPICE 协议。除非从 SPICE 切换到 VNC,否则这些虚拟机无法迁移到 RHEL 9。

先决条件

  • Web 控制台 VM 插件 已安装在您的系统上
  • 您有一个配置为使用 SPICE 远程显示协议的现有虚拟机,并且已经关闭。

流程

  1. 在 web 控制台的 Virtual Machines 界面中,点配置为使用 SPICE 协议的虚拟机的 Menu 按钮。

    此时会打开一个下拉菜单,其中包含各种虚拟机操作的控制。

  2. 单击 replace SPICE devices

    此时会打开 替换 SPICE 设备 对话框。

    注意

    如果您有多个使用 SPICE 协议的现有虚拟机,则会在此对话框中列出它们。在这里,您可以选择在单一步骤中使用 SPICE 转换到 VNC 的虚拟机。

  3. 替换

    此时会出现成功操作的确认。

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

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

先决条件

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

流程

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

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

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

验证

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

您可以使用鼠标和键盘与虚拟机控制台以与实际机器交互的方式与虚拟机控制台交互。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 凭证连接到主机 192.0.2.1

    # ssh root@192.0.2.1
    root@192.0.2.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 进行交互。

先决条件

  • 主机上的 GRUB 引导装载程序必须配置为使用串口控制台。要验证,请检查主机上的 /etc/default/grub 文件是否包含 GRUB_TERMINAL=serial 参数。

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

    # virsh dumpxml vm-name | grep console
    
    <console type='pty' tty='/dev/pts/2'>
    </console>
  • 虚拟机必须在内核命令行中配置串口控制台。要验证这一点,虚拟机上的 cat /proc/cmdline 命令输出应包含 console=<console-name& gt;,其中 &lt ;console-name& gt; 是特定于架构的:

    • 对于 AMD64 和 Intel 64: ttyS0

      注意

      此流程中的以下命令使用 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. 重启虚拟机。
  • 必须启用 serial-getty@<console-name > 服务。例如,在 AMD64 和 Intel 64 中:

    # systemctl status serial-getty@ttyS0.service
    
    ○ serial-getty@ttyS0.service - Serial Getty on ttyS0
         Loaded: loaded (/usr/lib/systemd/system/serial-getty@.service; enabled; preset: enabled)

流程

  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 语法。例如,要在 192.0.2.1 主机上以 root 用户身份使用 virsh list 命令:

# virsh -c qemu+ssh://root@192.0.2.1/system list
root@192.0.2.1's password:

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

但是,您可以通过修改 SSH 和 libvirt 配置来删除指定完整连接详情的需要。例如:

# virsh -c remote-host list
root@192.0.2.1's password:

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

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

流程

  1. 使用以下详细信息编辑 ~/.ssh/config 文件,其中 host-alias 是与特定远程主机关联的短名称,root@192.0.2.1 和 hosturl 的别名是主机的 URL 地址:

    # vi ~/.ssh/config
    Host example-host-alias
      User                    root
      Hostname                192.0.2.1
  2. 使用以下详情编辑 /etc/libvirt/libvirt.conf 文件,example-qemu-host-alias 是一个 QEMU 和 libvirt 工具将为 qemu+ssh://192.0.2.1/system 与预期主机 example-host-alias 关联的主机别名:

    # vi /etc/libvirt/libvirt.conf
    uri_aliases = [
      "example-qemu-host-alias=qemu+ssh://example-host-alias/system",
    ]

验证

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

    例如,验证以下列出了 192.0.2.1 远程主机上的虚拟机,到此主机的连接在前面的步骤中被设置为 example-qemu-host-alias

    # virsh -c example-qemu-host-alias list
    
    root@192.0.2.1's password:
    
    Id   Name                       State
    ----------------------------------------
    1    example-remote-guest      running
    注意

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

后续步骤

如果要在单一远程主机中只使用 libvirt 工具,您也可以为基于 libvirt 的实用程序设置特定的连接作为默认目标。但是,如果您也要管理本地主机或不同远程主机上的虚拟机,则不建议这样做。

  • 您可以编辑 /etc/libvirt/libvirt.conf 文件,并将 uri_default 参数的值设置为 example-qemu-host-alias ,来作为默认的 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 = "example-qemu-host-alias"

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

    $ virsh list
    root@192.0.2.1's password:
    
    Id   Name              State
    ---------------------------------
    1   example-remote-guest      running
  • 当连接到远程主机时,您可以避免向远程系统提供 root 密码。要做到这一点,请使用以下一个或多个方法:

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

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.