Red Hat Training
A Red Hat training course is available for RHEL 8
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 控制台中查看所选虚拟机的图形输出。
先决条件
- Web 控制台 VM 插件 已安装在您的系统上。
- 确保主机和虚拟机支持图形界面。
流程
在 Virtual Machines 界面中,单击您要查看其图形控制台的虚拟机。
此时将打开一个新页面,其中包含虚拟机的 Overview 和 Console 部分。
在控制台下拉菜单中选择 VNC 控制台。
VNC 控制台在 Web 界面中的菜单下方显示。
图形控制台会出现在 web 界面中。
单击 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。
单击 Launch remote viewer。
virt viewer
.vv
、文件下载。- 打开文件以启动 Virt Viewer。
远程查看器在大多数操作系统上提供。但是,一些浏览器扩展和插件不允许 Web 控制台打开 Virt Viewer。
流程
在 Virtual Machines 界面中,单击您要查看其图形控制台的虚拟机。
此时将打开一个新页面,其中包含虚拟机的 Overview 和 Console 部分。
在控制台下拉菜单中选择 Desktop Viewer。
点击 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_listen
或spice_listen
参数,以将其更改为主机的 IP 地址。 - SPICE port - 5900
- VNC port - 5901
-
Address - 默认地址为
2.4.1.3. 在 web 控制台中查看虚拟机串口控制台
您可以在 RHEL 8 web 控制台中查看所选虚拟机(VM)的串行控制台。这在主机机器或者虚拟机没有使用图形界面配置时很有用。
有关串行控制台的更多信息,请参阅 打开虚拟机串口控制台。
先决条件
- Web 控制台 VM 插件 已安装在您的系统上。
流程
在 Virtual Machines 窗格中,单击您要查看其串行控制台的虚拟机。
此时将打开一个新页面,其中包含虚拟机的 Overview 和 Console 部分。
在控制台下拉菜单中选择 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 控制台中的显示反映了虚拟机上正在执行的操作。
故障排除
- 如果在图形控制台中点击没有任何效果,请将控制台扩展为全屏。这是一个已知的鼠标光标偏移问题。
其它资源
-
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 凭证连接到主机 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~#
使用虚拟机的名称和用户访问凭证来连接它。例如,以下命令使用其 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+] 快捷键退出无响应控制台。
要在虚拟机上设置串行控制台,请执行以下操作:
在虚拟机上启用
console=ttyS0
内核选项:# grubby --update-kernel=ALL --args="console=ttyS0"
清除可能会阻止更改生效的内核选项。
# grub2-editenv - unset kernelopts
- 重启虚拟机。
流程
在您的主机系统上,使用
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
语法。例如,要在 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
要进行改进,请按照以下步骤操作。
流程
编辑或创建
~/.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
编辑或创建
/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", ]
验证
确认通过在本地系统上使用基于 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 密码。要做到这一点,请使用以下一个或多个方法:
- 设置对远程主机的基于密钥的 SSH 访问
- 使用 SSH 连接多路复用连接到远程系统
- 身份管理中的 Kerberos 身份验证
-
-c
(或--connect
)选项可用于在远程主机上运行virt-install
、virt-viewer
、virsh
和virt-manager
命令。