第4章 连接KVM虚拟机
KVM提供多种方式连接到虚拟机,包括VNC图形界面、串口控制台和SSH网络连接。本章将详细介绍各种连接方式的配置和使用。
VNC连接
VNC(Virtual Network Computing)是最常用的图形界面连接方式,适合需要图形界面的场景。
查看VNC端口
每个虚拟机启动时会自动分配一个VNC端口:
# 查看所有运行中的虚拟机
virsh list
# 输出示例:
# Id 名称 状态
# ----------------------------------------------------
# 1 web-blog running
# 2 web-www running
# 查看虚拟机的VNC端口
virsh vncdisplay web-blog
# :0
virsh vncdisplay web-www
# :1
VNC端口计算
- VNC默认基础端口:5900
- 实际端口 = 5900 + 显示号
- 例如::0 对应 5900端口,:1 对应 5901端口
查看VNC监听地址
# 查看详细的VNC配置
virsh dumpxml web-blog | grep vnc
# 输出示例:
# <graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0'>
# <listen type='address' address='0.0.0.0'/>
VNC客户端连接
-
Windows系统
- 推荐使用 VNC Viewer
- 连接地址:
宿主机IP:5900
-
Linux系统
# 安装VNC客户端
yum install -y tigervnc
# 连接虚拟机
vncviewer 192.168.1.100:5900 -
使用virt-viewer
# 直接通过虚拟机名称连接
virt-viewer centos7
# 远程连接
virt-viewer --connect qemu+ssh://root@192.168.1.100/system centos7
VNC安全配置
安全提示
默认VNC没有密码保护,建议在生产环境中配置密码或限制监听地址
# 编辑虚拟机配置
virsh edit centos7
# 添加VNC密码(在<graphics>标签中)
<graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1' passwd='your_password'>
<listen type='address' address='127.0.0.1'/>
</graphics>
# 重启虚拟机使配置生效
virsh destroy centos7
virsh start centos7
Console串口连接
串口控制台适合服务器管理,不依赖网络和图形界面。
配置虚拟机串口
默认情况下,virsh console
连接可能没有输出,需要在虚拟机内配置串口:
-
SSH登录虚拟机
# 查看虚拟机IP地址
virsh domifaddr centos7
# SSH连接
ssh root@192.168.122.10 -
配置串口参数
# 添加内核参数(CentOS 7/8)
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
# 验证配置
grep "115200" /boot/grub2/grub.cfg
# 重启虚拟机
reboot
使用Console连接
# 连接到虚拟机控制台
virsh console centos7
# 输出示例:
# 连接到域 centos7
# 换码符为 ^]
# 按Enter键显示登录提示
# CentOS Linux 7 (Core)
# Kernel 3.10.0-957.el7.x86_64 on an x86_64
#
# localhost login:
退出Console
- 按
Ctrl + ]
组合键退出console连接 - 在某些终端中可能需要按
Ctrl + 5
或Ctrl + Shift + ]
Console配置最佳实践
-
配置串口自动登录(可选)
# 创建自动登录服务
mkdir -p /etc/systemd/system/serial-getty@ttyS0.service.d/
cat > /etc/systemd/system/serial-getty@ttyS0.service.d/autologin.conf << EOF
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin root -s %I 115200,38400,9600 vt102
EOF
# 重载并启动服务
systemctl daemon-reload
systemctl restart serial-getty@ttyS0.service -
配置多个串口(高级)
<!-- 在虚拟机XML配置中添加 -->
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
SSH网络连接
SSH是最常用的远程管理方式,提供安全的加密连接。
获取虚拟机IP地址
# 方法1:通过virsh查看(需要qemu-guest-agent)
virsh domifaddr centos7
# 方法2:查看DHCP租约
virsh net-dhcp-leases default
# 方法3:通过ARP缓存查找
virsh domiflist centos7
# 获取MAC地址后
arp -n | grep "52:54:00:xx:xx:xx"
配置静态IP(可选)
# 在虚拟机内配置静态IP
vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 配置内容:
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.122.100
NETMASK=255.255.255.0
GATEWAY=192.168.122.1
DNS1=8.8.8.8
# 重启网络
systemctl restart network
SSH密钥认证
# 在宿主机生成密钥对
ssh-keygen -t rsa -b 2048
# 复制公钥到虚拟机
ssh-copy-id root@192.168.122.100
# 测试无密码登录
ssh root@192.168.122.100
连接方式对比
连接方式 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
VNC | 支持图形界面 可查看启动过程 | 占用带宽大 性能较低 | 图形界面操作 系统安装 |
Console | 不依赖网络 资源占用少 | 仅支持字符界面 需要配置 | 紧急维护 网络故障时 |
SSH | 安全加密 功能完整 | 依赖网络 需要IP地址 | 日常管理 远程操作 |
连接故障排查
VNC连接失败
-
检查VNC监听状态
# 查看VNC进程
ps aux | grep vnc
# 查看端口监听
netstat -tlnp | grep 590 -
防火墙设置
# 开放VNC端口
firewall-cmd --add-port=5900-5910/tcp --permanent
firewall-cmd --reload
Console无输出
常见原因
- 未配置串口参数
- 内核参数未生效
- 串口服务未启动
解决步骤:
# 1. 确认串口配置
virsh dumpxml centos7 | grep -A5 serial
# 2. 检查虚拟机内串口服务
systemctl status serial-getty@ttyS0.service
# 3. 查看串口设备
ls -la /dev/ttyS*
SSH连接超时
# 1. 检查虚拟机网络
virsh domifaddr centos7
# 2. 测试网络连通性
ping 192.168.122.100
# 3. 检查SSH服务
virsh console centos7
systemctl status sshd
# 4. 检查防火墙
iptables -L -n
高级连接配置
配置SPICE协议(VNC替代方案)
SPICE提供比VNC更好的性能和功能:
# 修改虚拟机配置
virsh edit centos7
# 将graphics配置改为:
<graphics type='spice' autoport='yes'>
<listen type='address' address='0.0.0.0'/>
<image compression='auto'/>
</graphics>
# 添加声音和USB重定向支持
<sound model='ich6'/>
<redirdev bus='usb' type='spicevmc'/>
配置Web控制台
使用novnc提供Web访问:
# 安装novnc
yum install -y novnc
# 启动websocket代理
websockify 6080 localhost:5900 &
# 访问地址:http://宿主机IP:6080/vnc.html
总结
本章介绍了连接KVM虚拟机的三种主要方式:
- ✅ VNC图形连接:适合需要图形界面的场景
- ✅ Console串口连接:适合紧急维护和无网络环境
- ✅ SSH网络连接:适合日常管理操作
- ✅ 各种连接方式的配置和故障排查
- ✅ 高级连接选项如SPICE和Web控制台
选择合适的连接方式可以提高管理效率。下一章将介绍KVM的存储管理功能。