在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持)
在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持)
发布时间: 2015-02-27 00:16
1.spice的USB重定向
1.1 介绍
使用usb重定向,在client上插入的U盘会被重定向到虚拟机中. 其有两种实现方式,自动重定向(所有插入client中的U盘都被重定向),或者手动选择需要重定向的U盘
USB重定向需要为虚拟机添加USB2 EHCI驱动,以及若干个Spice channels,Spice channels的个数决定了客户端一次可以有多少个USB设备被重定向到guest
更多参考:
http://people.freedesktop.org/~teuf/spice-doc/html/ch02s06.html
http://www.spice-space.org/page/UsbRedir
http://fedoraproject.org/wiki/Features/UsbNetworkRedirection
1.2服务器上安装软件
[root@controller2 vhosts]# rpm -qa | grep usb usbredir-0.5.1-1.el6.x86_64 libusb-0.1.12-23.el6.x86_64 usbutils-003-4.el6.x86_64 libusb1-1.0.9-0.6.rc1.el6.x86_64
1.3 虚拟机xml文件中添加USB redirection驱动
#首先关闭虚拟机,然后修改其xml文件,添加下面标签
<!-- 移除xml文件中其它的USB设备,然后添加下面的部分 --> <controller type='usb' index='0' model='ich9-ehci1'/> <controller type='usb' index='0' model='ich9-uhci1'><master startport='0'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'><master startport='2'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'><master startport='4'/> </controller> <redirdev bus='usb' type='spicevmc'/> <redirdev bus='usb' type='spicevmc'/> <redirdev bus='usb' type='spicevmc'/> <redirdev bus='usb' type='spicevmc'/>
1.3中是在xml文件中添加usb驱动,其对应的命令行参数如下(当使用qemu-kvm命令行启动虚拟机时需要):
-device ich9-usb-ehci1,id=usb \ -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \ -device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \ -device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \ -chardev spicevmc,name=usbredir,id=usbredirchardev1 \ -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \ -chardev spicevmc,name=usbredir,id=usbredirchardev2 \ -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \ -chardev spicevmc,name=usbredir,id=usbredirchardev3 \ -device usb-redir,chardev=usbredirchardev3,id=usbredirdev3
1.4 客户端配置
客户端连接工具使用virt-viewer
windows7版本的virt-viewer默认不支持USB重定向,需要手动重新编译,Linux下的客户端可以编译源码支持USB重定向
virt-viewer源码: http://virt-manager.org/download/sources/virt-viewer/virt-viewer-1.0.tar.gz
virt-viewer windows客户端: http://virt-manager.org/download/sources/virt-viewer/virt-viewer-x64-1.0.msi
2 spice使用TLS和密码实现双重认证
默认情况下,客户端和虚拟机传输的数据是未加密的,下面的步骤中将使用TLS加密客户端和虚拟机之间的连接
2.1 生成CA证书,服务器证书
2.1.1 创建证书存放目录
cd /etc/pki mkdir libvirt-spice cd libvirt-spice
2.1.2 使用下面脚本创建证书
注意:脚本生成的ca-cert.pem文件,最后输出的变量”SUBJECT“值都需要拷贝到客户端
#!/bin/bashSERVER_KEY=server-key.pem # creating a key for our ca if [ ! -e ca-key.pem ]; thenopenssl genrsa -des3 -out ca-key.pem 1024 fi # creating a ca if [ ! -e ca-cert.pem ]; thenopenssl req -new -x509 -days 1095 -key ca-key.pem -out ca-cert.pem -subj "/C=IL/L=Raanana/O=Red Hat/CN=my CA" fi # create server key if [ ! -e $SERVER_KEY ]; thenopenssl genrsa -out $SERVER_KEY 1024 fi # create a certificate signing request (csr) if [ ! -e server-key.csr ]; thenopenssl req -new -key $SERVER_KEY -out server-key.csr -subj "/C=IL/L=Raanana/O=Red Hat/CN=my server" fi # signing our server certificate with this ca if [ ! -e server-cert.pem ]; thenopenssl x509 -req -days 1095 -in server-key.csr -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem fi# now create a key that doesn't require a passphrase openssl rsa -in $SERVER_KEY -out $SERVER_KEY.insecure mv $SERVER_KEY $SERVER_KEY.secure mv $SERVER_KEY.insecure $SERVER_KEY# show the results (no other effect) openssl rsa -noout -text -in $SERVER_KEY openssl rsa -noout -text -in ca-key.pem openssl req -noout -text -in server-key.csr openssl x509 -noout -text -in server-cert.pem openssl x509 -noout -text -in ca-cert.pem# copy *.pem file to /etc/pki/libvirt-spice if [[ -d "/etc/pki/libvirt-spice" ]] thencp ./*.pem /etc/pki/libvirt-spice elsemkdir /etc/pki/libvirt-spicecp ./*.pem /etc/pki/libvirt-spice fi# echo SUBJECT echo "SUBJECT is:" \" `openssl x509 -noout -text -in server-cert.pem | grep Subject: | cut -f 10- -d " "` \"
2.2虚拟机加载证书
#默认不管vnc还是spice都是监听在127.0.0.1上,这样肯定不能从网络中访问
#下面的设置默认会使所有的虚拟机开启两个端口,一个普通端口,一个为使用ssl加密的安全端口,并且监听所有地址
#vim /etc/libvirt/qemu.conf
spice_listen="0.0.0.0"
spice_tls=1
spice_tls_x509_cert_dir="/etc/pki/libvirt-spice"#下面的为默认密码认证,仅当虚拟机xml文件中没有设置passwd参数时才生效,为了能够使用不同密码,这里不启用,改在xml文件中设置密码
#spice_password = "123456"#重启libvirtd加载证书
/etc/init.d/libvirtd restart
2.3 在虚拟机xml文件中设置密码及安全端口
xml文件中安全端口可以有不同设置方法
A <graphics type='spice' autoport='yes' listen='0.0.0.0' passwd='123456'> B <graphics type='spice' port='5901' autoport='no' listen='0.0.0.0' passwd='123456'> C <graphics type='spice' tlsPort='-1' autoport='no' listen='0.0.0.0' passwd='123456'>
A: 每台虚拟机自动配置两个端口,普通端口和安全端口,并且端口号自动分配(5900+N)
B: 不自动配置端口,手动指定一个普通端口,不开启安全端口
C: 不自动配置端口,只开启安全端口,并且安全端口自动分配(5900+N)
passwd=123456 设置使用密码认证,即客户端连接虚拟机时,会弹出密码验证窗口
2.4 windows客户端中使用spice加密连接
2.4.1 拷贝ca-cert.pem证书
拷贝服务器上脚本生成的ca-cert.pem文件到windows下某个目录,比如 F:\files\ca\
2.4.2 windows中添加环境变量
变量名: SUBJECT 变量值: C=IL, L=Raanana, O=Red Hat, CN=my server #(变量值为脚本最后输出内容),添加环境变量不是必须的操作,是为了下面能够使用%SUBJECT%这个变量
2.4.3 在cmd中测试连接
打开cmd, 进入remote-viewer.exe程序所在目录,默认为 C:\Program Files\VirtViewer\bin
#运行命令 remote-viewer.exe --spice-ca-file F:\ca\ca-cert.pem spice://192.168.11.166?tls-port=5905 --spice-host-subject="%SUBJECT%"
如图
2.5 Linux客户端中使用spice加密连接
首先安装virt-viewer客户端
yum install virt-viewer remote-viewer --spice-ca-file ca-cert.pem --spice-host-subject 'C=IL,L=Raanana,O=Red Hat,CN=my server' spice://192.168.11.166/?tls-port=5903
#也可以把'C=IL,L=Raanana,O=Red Hat,CN=my server'部分设置为一个全局环境变量SUBJECT,以简化命令
3 spice的多客户端支持
3.1 多显示器支持
spice允许客户端使用多个显示器连接到同一台虚拟机,为了实现这个功能,虚拟机必须配置有多个qxl设备驱动(对于Windows虚拟机),或者有一个配置为支持多个heads的qxl设备驱动(Linux虚拟机)
为了支持多显示器,必须为虚拟机配置qxl驱动,虚拟机中也需要安装qxl驱动支持(xorg-x11-drv-qxl),参考http://www.spice-space.org/download.html中guest部分
3.1.1 Linux虚拟机配置
对于Linux虚拟机,配置好qxl驱动之后,默认会启用多显示器支持.如果Linux系统版本过旧,可以参考这个http://hansdegoede.livejournal.com/12969.html
3.1.2 windows虚拟机配置
修改xml文件,添加多个video标签,然后重新启动虚拟机
<video><model type='qxl'> </video> <video><model type='qxl'> </video>
3.2 多客户端支持
多客户端支持允许多个用户连接同一台虚拟机,参考http://www.spice-space.org/page/Features/MultipleClients
3.2.1 使用qemu-kvm命令行
对于使用qemu-kvm命令行创建的虚拟机,只需要给宿主机添加下面的环境变量
export SPICE_DEBUG_ALLOW_MC=1
添加之后,用qemu-kvm命令创建虚拟机,可以看到输出中多了一行,表示spice已经启用多客户端支持
3.2.2 使用libvirt
对于使用libvirt管理的虚拟机,添加上面的环境变量不生效,需要修改虚拟机xml文件
使用qemu:commandline标签传递变量"SPICE_DEBUG_ALLOW_MC"值给虚拟机
<!-- 更改第一行为下面 --> <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <!-- 在下面类似位置添加 --> <domain><devices>...</devices><qemu:commandline><qemu:env name='SPICE_DEBUG_ALLOW_MC' value='1'/></qemu:commandline> </domain>
添加上面的之后,重启虚拟机,即可
如果要验证添加的参数是否生效,可以在启动虚拟机(cos_v1)时,查看虚拟机日志输出
tail -f /var/log/libvirt/qemu/cos_v1.log #下面是输出 2014-12-26 10:06:10.763+0000: starting up LC_ALL=C PATH=/sbin:/usr/sbin:/bin:/usr/bin HOME=/root USER=root LOGNAME=root QEMU_AUDIO_DRV=spice SPICE_DEBUG_ALLOW_MC=1 /usr/libexec/qemu-kvm -name cos_v1 -S -M rhel6.5.0 ... ... char device redirected to /dev/pts/7 ((null):29858): Spice-Warning **: reds.c:4010:do_spice_init: spice: allowing multiple client connections (crashy) #这行表明添加成功
转载于:https://www.cnblogs.com/ruiy/p/5111977.html
在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持)相关推荐
- 在KVM虚拟机中使用spice
1.spice介绍 1.1 spice简介 spice是由Qumranet开发的开源网络协议,2008年红帽收购了Qumranet获得了这个协议.SPICE是红帽在虚拟化领域除了KVM的又一" ...
- kvm虚拟机中鼠标不同步的问题解决方法
kvm虚拟机中鼠标不同步的问题解决方法 参考文章: (1)kvm虚拟机中鼠标不同步的问题解决方法 (2)https://www.cnblogs.com/caidingyu/p/10695768.htm ...
- kvm虚拟机vnc和spice配置
2019独角兽企业重金招聘Python工程师标准>>> 原文链接 一.简介 通过vnc或spice方式访问虚拟主机上的KVM虚拟机,可以直接通过图形化界面virt-manager来设 ...
- 服务器虚拟化vnc,kvm虚拟机vnc和spice配置
一.简介 通过vnc或spice方式访问虚拟主机上的KVM虚拟机,可以直接通过图形化界面virt-manager来设置,但此处通过xml配置文件修改. 二.详解 1.VNC方式访问 vnc方式访问虚拟 ...
- 在 KVM 虚拟机中运行 macOS 系统
之前介绍过如何在 Ubuntu 系统和 KVM 中安装 Windows 系统,当时就说了,希望有机会能把 macOS 也给虚拟化了,这样就完美了.今天这篇文章就是解决这个问题的. 准备工作 开始之前, ...
- oracle 判断是否错误_Oracle中的并行系列(二):你设置的并行真的生效了吗?...
作者 刘金龙·沃趣科技高级数据库技术专家 出品 沃趣科技 经过第一篇文章<Oracle 中的并行系列(一)>的介绍,我们对Oracle中的并行有了大致的了解.但是实际使用并行的过程中我 ...
- 计算机视觉领域稍微容易中的期刊系列(二)1
计算机视觉领域稍微容易中的期刊系列 (1)适合于图像处理方向的SCI期刊杂志列表 (2)模式识别.计算机视觉领域期刊 表1. 适合于图像处理方向的SCI期刊杂志列表 ISSN 期刊名 出版周期 105 ...
- 计算机视觉领域稍微容易中的期刊系列(二)
计算机视觉领域稍微容易中的期刊系列 (1)适合于图像处理方向的SCI期刊杂志列表 (2)模式识别.计算机视觉领域期刊 表1. 适合于图像处理方向的SCI期刊杂志列表 ISSN 期刊名 出版周期 105 ...
- lsdyna如何设置set中的node_list_Redis 系列教程(二)Redis中的五种数据类型
上篇文章我们介绍了如何在Linux中安装Redis,本文我们来了解下Redis中的五种数据类型. 五大数据类型介绍 redis 中的数据都是以 key/value 的形式存储的,五大数据类型主要是指 ...
- DirectX中文文档系列:二、Direct3D设备(device)
一.介绍 Direct3D device 是 D3D的渲染组件,他封装并保存了渲染状态(rendering state).D3D device负责模型转换和光照操作,并将最终结果光栅化(rasteri ...
最新文章
- 苹果天气不显示_iPhone6开机不显示苹果售后维修案例
- 用java异常完成丢色子功能,java自动投掷骰子设计报告(含源码)
- 属兔的人今日运势-360星座网_【生肖运势】12月17日
- C(++) Websocket实现扫码二维码登录---GoEasy
- Ajax拿取html格式数据
- 使用JAnnocessor生成Java代码
- 飞畅科技-工业以太网交换机的差异性
- Java面试题库,java用tabula解析pdf表格
- Java基础软件的安装及配置及Javascript的运行
- 改善深层神经网络:超参数调整、正则化以及优化 —— 3.1调试处理
- [填坑]SerialPort的“端口被关闭”
- cmd执行bat结果不回显_cmd - 如何在bat文件中调用另一个bat文件
- Django【基础篇】
- 微信小程序点击图片全屏展示,并可以翻下一张图
- cad单位_CAD标注样式如何转换公制和英制
- LTspice蒙特卡罗分析正态分布图工具
- 吴恩达深度学习笔记(40)-指数加权平均数优化算法
- 网站文章采集器-万能文章采集器
- 实战分享|作为AI小白,如何争取AI产品经理offer
- H3C配置三层交换机配置实例
热门文章
- python---python实现快速排序
- 32位oracle_ORACLE如何优化代码将查询速度从5s提升到0.1s
- 蓝桥杯 拉马车(模拟)
- 别动我的代码!聊聊那些代码保护的艺术
- TensorFlow 变量共享: get_variable
- 完美解决SpringMVC中静态资源无法找到(No mapping found for HTTP request with URI)问题...
- Java检查日期格式是否正确
- server.htaccess 具体解释以及 .htaccess 參数说明
- 【Java集合的详细研究4】Java中如何遍历Map对象的4种方法
- 简单类型参数是值传递,对象参数是引用传递