2.4. 连接至虚拟机
要在 RHEL 8 中与虚拟机(VM)交互,您需要通过以下方法之一连接它:
- 使用 Web 控制台界面时,请在 web 控制台界面中使用 Virtual Machines 窗格。如需更多信息,请参阅使用 web 控制台与虚拟机交互。
- 如果您需要在不使用 Web 控制台的情况下与虚拟机图形显示交互,请使用 Virt Viewer 应用程序。详情请查看使用 Virt Viewer 打开虚拟机图形控制台。
- 如果不需要图形显示,请使用 SSH 终端连接。
- 当使用网络无法从您的系统访问虚拟机时,请使用 virsh 控制台。
如果您要连接的虚拟机位于远程主机而不是本地主机,您可以选择配置您的系统以更方便地访问远程主机。
2.4.1. 使用 web 控制台与虚拟机交互
要在 RHEL 8 web 控制台中与虚拟机(VM)交互,您需要连接到虚拟机的控制台。这包括图形和串行控制台。
- 要在 web 控制台中与虚拟机的图形界面交互,请使用图形控制台。
- 要在远程 viewer 中与虚拟机的图形界面交互,请使用remote viewers 中的图形控制台。
- 要在 web 控制台中与虚拟机的 CLI 交互,请使用 串行控制台。
2.4.1.1. 在 web 控制台中查看虚拟机图形控制台
通过使用虚拟机(VM)控制台界面,您可以在 RHEL 8 web 控制台中查看所选虚拟机的图形输出。
先决条件
已安装 RHEL 8 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
- Web 控制台 VM 插件 已安装在您的系统上。
- 确保主机和虚拟机支持图形界面。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
在
界面中,单击您要查看其图形控制台的虚拟机。此时将打开一个新页面,其中包含虚拟机的 Overview 和 Console 部分。
在控制台下拉菜单中选择
。VNC 控制台在 Web 界面中的菜单下方显示。
图形控制台会出现在 web 界面中。
单击
现在,您可以使用鼠标和键盘以与实际机器交互的方式与虚拟机控制台交互。VM 控制台中的显示反映了虚拟机上正在执行的操作。
运行 web 控制台的主机可能会截获特定的组合键,如 Ctrl+Alt+Del,阻止它们发送到虚拟机。
要发送此类组合键,请单击
菜单并选择要发送的键序列。例如,要将 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。
单击
。virt viewer
.vv
、文件下载。- 打开文件以启动 Virt Viewer。
远程查看器在大多数操作系统上提供。但是,一些浏览器扩展和插件不允许 Web 控制台打开 Virt Viewer。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
在
界面中,单击您要查看其图形控制台的虚拟机。此时将打开一个新页面,其中包含虚拟机的 Overview 和 Console 部分。
在控制台下拉菜单中选择
。点击
。图形控制台在 Virt Viewer 中打开。
您可以使用鼠标和键盘与虚拟机控制台以与实际机器交互的方式与虚拟机控制台交互。VM 控制台中的显示反映了虚拟机上正在执行的操作。
运行 web 控制台的服务器可以截获特定的组合键,如 Ctrl+Alt+Del,阻止它们发送到虚拟机。
要发送这样的组合键,点
菜单并选择要使用地键序列。例如:要将 Ctrl+Alt+Del 组合发送到 VM,点
菜单并选择 菜单。故障排除
- 如果在图形控制台中点击没有任何效果,请将控制台扩展为全屏。这是一个已知的鼠标光标偏移问题。
如果在 web 控制台中启动 Remote Viewer 无法正常工作,或者不佳,您可以使用以下协议手动与任何 viewer 应用程序连接:
-
Address - 默认地址为
127.0.0.1
。您可以修改/etc/libvirt/qemu.conf
中的vnc_listen
或spice_listen
参数,以将其更改为主机的 IP 地址。 - SPICE port - 5900
- VNC port - 5901
-
Address - 默认地址为
2.4.1.3. 在 web 控制台中查看虚拟机串口控制台
您可以在 RHEL 8 web 控制台中查看所选虚拟机(VM)的串行控制台。这在主机机器或者虚拟机没有使用图形界面配置时很有用。
有关串行控制台的更多信息,请参阅 打开虚拟机串口控制台。
先决条件
已安装 RHEL 8 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
- Web 控制台 VM 插件 已安装在您的系统上。
流程
登录到 RHEL 8 web 控制台。
详情请参阅 登录到 web 控制台。
在
窗格中,单击您要查看其串行控制台的虚拟机。此时将打开一个新页面,其中包含虚拟机的 Overview 和 Console 部分。
在控制台下拉菜单中选择
。图形控制台会出现在 web 界面中。
您可以断开串行控制台与虚拟机的连接和重新连接。
- 要断开串行控制台与虚拟机的连接,请点 。
- 要将串行控制台重新连接到虚拟机,请点 。
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 远程显示协议的现有虚拟机,并且已经关闭。
流程
在 web 控制台的 Virtual Machines 界面中,点配置为使用 SPICE 协议的虚拟机的 Menu 按钮。
此时会打开一个下拉菜单,其中包含各种虚拟机操作的控制。
单击
。此时会打开 替换 SPICE 设备 对话框。
注意如果您有多个使用 SPICE 协议的现有虚拟机,则会在此对话框中列出它们。在这里,您可以选择在单一步骤中使用 SPICE 转换到 VNC 的虚拟机。
点
。此时会出现成功操作的确认。
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 控制台中的显示反映了虚拟机上正在执行的操作。
故障排除
- 如果在图形控制台中点击没有任何效果,请将控制台扩展为全屏。这是一个已知的鼠标光标偏移问题。
其它资源
-
您系统上的
virt-viewer
手册页 - 设置对远程虚拟化主机的简单访问
- 使用 web 控制台与虚拟机交互
2.4.3. 使用 SSH 连接到虚拟机
要使用 SSH 连接协议与虚拟机(VM)终端交互,请按照以下步骤操作。
先决条件
- 有对目标虚拟机的网络连接和 root 访问权限。
- 如果目标虚拟机位于远程主机上,您也可以拥有对该主机的连接和 root 访问权限。
您的虚拟机网络由
libvirt
生成的dnsmasq
分配 IP 地址。这是libvirt
NAT 网络 中的示例。值得注意的是,如果您的虚拟机使用以下网络配置之一,则无法使用 SSH 连接到虚拟机:
-
hostdev
接口 - 直接接口
- 网桥接口
-
在虚拟机主机上已安装并启用了
libvirt-nss
组件。如果没有,请执行以下操作:安装
libvirt-nss
软件包:# yum install libvirt-nss
编辑
/etc/nsswitch.conf
文件,并将libvirt_guest
添加到hosts
行中:... passwd: compat shadow: compat group: compat hosts: files libvirt_guest dns ...
流程
当连接到远程虚拟机时,请首先 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~#
使用虚拟机的名称和用户访问凭证来连接它。例如,以下命令使用其 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;,其中 < ;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+] 快捷键退出无响应控制台。
要在虚拟机上设置串行控制台,请执行以下操作:
在虚拟机上启用
console=ttyS0
内核选项:# grubby --update-kernel=ALL --args="console=ttyS0"
清除可能会阻止更改生效的内核选项。
# grub2-editenv - unset kernelopts
- 重启虚拟机。
必须启用
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)
流程
在您的主机系统上,使用
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:
- 您还可以使用与标准命令行界面相同的方法与 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
要进行改进,请按照以下步骤操作。
流程
使用以下详细信息编辑
~/.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
使用以下详情编辑
/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", ]
验证
确认通过在本地系统上使用基于 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 密码。要做到这一点,请使用以下一个或多个方法:
- 设置对远程主机的基于密钥的 SSH 访问
- 使用 SSH 连接多路复用连接到远程系统
- 身份管理中的 Kerberos 身份验证
-
-c
(或--connect
)选项可用于在远程主机上运行virt-install
、virt-viewer
、virsh
和virt-manager
命令。