跳到主要内容

第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客户端连接

  1. Windows系统

    • 推荐使用 VNC Viewer
    • 连接地址:宿主机IP:5900
  2. Linux系统

    # 安装VNC客户端
    yum install -y tigervnc

    # 连接虚拟机
    vncviewer 192.168.1.100:5900
  3. 使用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连接可能没有输出,需要在虚拟机内配置串口:

  1. SSH登录虚拟机

    # 查看虚拟机IP地址
    virsh domifaddr centos7

    # SSH连接
    ssh root@192.168.122.10
  2. 配置串口参数

    # 添加内核参数(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 + 5Ctrl + Shift + ]

Console配置最佳实践

  1. 配置串口自动登录(可选)

    # 创建自动登录服务
    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
  2. 配置多个串口(高级)

    <!-- 在虚拟机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连接失败

  1. 检查VNC监听状态

    # 查看VNC进程
    ps aux | grep vnc

    # 查看端口监听
    netstat -tlnp | grep 590
  2. 防火墙设置

    # 开放VNC端口
    firewall-cmd --add-port=5900-5910/tcp --permanent
    firewall-cmd --reload

Console无输出

常见原因
  1. 未配置串口参数
  2. 内核参数未生效
  3. 串口服务未启动

解决步骤:

# 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的存储管理功能。