本系列其它文章

spice在桌面虚拟化中的应用系列之一(spice简介,性能优化等)

spice在桌面虚拟化中的应用系列之二(Linux平台spice客户端的编译安装,支持USB映射)

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服务器上安装软件

  1. [root@controller2 vhosts]# rpm -qa | grep usb
  2. usbredir-0.5.-.el6.x86_64
  3. libusb-0.1.-.el6.x86_64
  4. usbutils--.el6.x86_64
  5. libusb1-1.0.-0.6.rc1.el6.x86_64

1.3 虚拟机xml文件中添加USB redirection驱动

  1. #首先关闭虚拟机,然后修改其xml文件,添加下面标签
  1. <!-- 移除xml文件中其它的USB设备,然后添加下面的部分 -->
  2. <controller type='usb' index='0' model='ich9-ehci1'/>
  3. <controller type='usb' index='0' model='ich9-uhci1'>
  4. <master startport='0'/>
  5. </controller>
  6. <controller type='usb' index='0' model='ich9-uhci2'>
  7. <master startport='2'/>
  8. </controller>
  9. <controller type='usb' index='0' model='ich9-uhci3'>
  10. <master startport='4'/>
  11. </controller>
  12. <redirdev bus='usb' type='spicevmc'/>
  13. <redirdev bus='usb' type='spicevmc'/>
  14. <redirdev bus='usb' type='spicevmc'/>
  15. <redirdev bus='usb' type='spicevmc'/>

1.3中是在xml文件中添加usb驱动,其对应的命令行参数如下(当使用qemu-kvm命令行启动虚拟机时需要):

  1. -device ich9-usb-ehci1,id=usb \
  2. -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,multifunction=on \
  3. -device ich9-usb-uhci2,masterbus=usb.0,firstport=2 \
  4. -device ich9-usb-uhci3,masterbus=usb.0,firstport=4 \
  5. -chardev spicevmc,name=usbredir,id=usbredirchardev1 \
  6. -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1 \
  7. -chardev spicevmc,name=usbredir,id=usbredirchardev2 \
  8. -device usb-redir,chardev=usbredirchardev2,id=usbredirdev2 \
  9. -chardev spicevmc,name=usbredir,id=usbredirchardev3 \
  10. -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 创建证书存放目录
  1. cd /etc/pki
  2. mkdir libvirt-spice
  3. cd libvirt-spice
2.1.2 使用下面脚本创建证书

注意:脚本生成的ca-cert.pem文件,最后输出的变量”SUBJECT“值都需要拷贝到客户端

  1. #!/bin/bash
  2.  
  3. SERVER_KEY=server-key.pem
  4. # creating a key for our ca
  5. if [ ! -e ca-key.pem ]; then
  6. openssl genrsa -des3 -out ca-key.pem
  7. fi
  8. # creating a ca
  9. if [ ! -e ca-cert.pem ]; then
  10. openssl req -new -x509 -days -key ca-key.pem -out ca-cert.pem -subj "/C=IL/L=Raanana/O=Red Hat/CN=my CA"
  11. fi
  12. # create server key
  13. if [ ! -e $SERVER_KEY ]; then
  14. openssl genrsa -out $SERVER_KEY
  15. fi
  16. # create a certificate signing request (csr)
  17. if [ ! -e server-key.csr ]; then
  18. openssl req -new -key $SERVER_KEY -out server-key.csr -subj "/C=IL/L=Raanana/O=Red Hat/CN=my server"
  19. fi
  20. # signing our server certificate with this ca
  21. if [ ! -e server-cert.pem ]; then
  22. openssl x509 -req -days -in server-key.csr -CA ca-cert.pem -CAkey ca-key.pem -set_serial -out server-cert.pem
  23. fi
  24.  
  25. # now create a key that doesn't require a passphrase
  26. openssl rsa -in $SERVER_KEY -out $SERVER_KEY.insecure
  27. mv $SERVER_KEY $SERVER_KEY.secure
  28. mv $SERVER_KEY.insecure $SERVER_KEY
  29.  
  30. # show the results (no other effect)
  31. openssl rsa -noout -text -in $SERVER_KEY
  32. openssl rsa -noout -text -in ca-key.pem
  33. openssl req -noout -text -in server-key.csr
  34. openssl x509 -noout -text -in server-cert.pem
  35. openssl x509 -noout -text -in ca-cert.pem
  36.  
  37. # copy *.pem file to /etc/pki/libvirt-spice
  38. if [[ -d "/etc/pki/libvirt-spice" ]]
  39. then
  40. cp ./*.pem /etc/pki/libvirt-spice
  41. else
  42. mkdir /etc/pki/libvirt-spice
  43. cp ./*.pem /etc/pki/libvirt-spice
  44. fi
  45.  
  46. # echo SUBJECT
  47. 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加密的安全端口,并且监听所有地址

  1. #vim /etc/libvirt/qemu.conf
  2. spice_listen="0.0.0.0"
  3. spice_tls=
  4. spice_tls_x509_cert_dir="/etc/pki/libvirt-spice"
  5.  
  6. #下面的为默认密码认证,仅当虚拟机xml文件中没有设置passwd参数时才生效,为了能够使用不同密码,这里不启用,改在xml文件中设置密码
  7. #spice_password = ""
  8.  
  9. #重启libvirtd加载证书
  10. /etc/init.d/libvirtd restart

2.3 在虚拟机xml文件中设置密码及安全端口

xml文件中安全端口可以有不同设置方法

  1. A <graphics type='spice' autoport='yes' listen='0.0.0.0' passwd='123456'>
  2. B <graphics type='spice' port='5901' autoport='no' listen='0.0.0.0' passwd='123456'>
  3. 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中添加环境变量
  1. 变量名: SUBJECT
  2. 变量值: C=IL, L=Raanana, O=Red Hat, CN=my server
  3.  
  4. #(变量值为脚本最后输出内容),添加环境变量不是必须的操作,是为了下面能够使用%SUBJECT%这个变量
2.4.3 在cmd中测试连接

打开cmd, 进入remote-viewer.exe程序所在目录,默认为 C:\Program Files\VirtViewer\bin

  1. #运行命令
  2. 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客户端

  1. yum install virt-viewer
  2. 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
  1. #也可以把'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标签,然后重新启动虚拟机

  1. <video>
  2. <model type='qxl'>
  3. </video>
  4. <video>
  5. <model type='qxl'>
  6. </video>

3.2 多客户端支持

多客户端支持允许多个用户连接同一台虚拟机,参考http://www.spice-space.org/page/Features/MultipleClients

3.2.1 使用qemu-kvm命令行

对于使用qemu-kvm命令行创建的虚拟机,只需要给宿主机添加下面的环境变量

  1. export SPICE_DEBUG_ALLOW_MC=

添加之后,用qemu-kvm命令创建虚拟机,可以看到输出中多了一行,表示spice已经启用多客户端支持

3.2.2 使用libvirt
  1. 对于使用libvirt管理的虚拟机,添加上面的环境变量不生效,需要修改虚拟机xml文件
  1. 使用qemu:commandline标签传递变量"SPICE_DEBUG_ALLOW_MC"值给虚拟机
  1. <!-- 更改第一行为下面 -->
  2. <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  3. <!-- 在下面类似位置添加 -->
  4. <domain>
  5. <devices>
  6. ...
  7. </devices>
  8. <qemu:commandline>
  9. <qemu:env name='SPICE_DEBUG_ALLOW_MC' value='1'/>
  10. </qemu:commandline>
  11. </domain>

添加上面的之后,重启虚拟机,即可

如果要验证添加的参数是否生效,可以在启动虚拟机(cos_v1)时,查看虚拟机日志输出

  1. tail -f /var/log/libvirt/qemu/cos_v1.log
  2. #下面是输出
  3. -- ::10.763+: starting up
  4. LC_ALL=C PATH=/sbin:/usr/sbin:/bin:/usr/bin HOME=/root USER=root LOGNAME=root QEMU_AUDIO_DRV=spice SPICE_DEBUG_ALLOW_MC= /usr/libexec/qemu-kvm -name cos_v1 -S -M rhel6.5.0
  5. ...
  6. ...
  7. char device redirected to /dev/pts/
  8. ((null):): Spice-Warning **: reds.c::do_spice_init: spice: allowing multiple client connections (crashy) #这行表明添加成功

spice在桌面虚拟化中的应用系列之三(USB映射实现,SSL加密,密码认证,多客户端支持)的更多相关文章

  1. spice在桌面虚拟化中的应用系列之一(spice简介,性能优化等)

    1.spice介绍 1.1 spice简介 spice是由Qumranet开发的开源网络协议,2008年红帽收购了Qumranet获得了这个协议.SPICE是红帽在虚拟化领域除了KVM的又一“新兴技术 ...

  2. spice在桌面虚拟化中的应用系列之二(Linux平台spice客户端的编译安装,支持USB映射)

    1.系统环境 1.1 测试环境 centos6.4最小化安装(centos6.x桌面版也适用) 使用yum源为163源加EPEL源 1.2 spice客户端介绍 spice作为远程连接工具,可以支持远 ...

  3. ENS中文文档系列之三 [ ENS常见问题 ]

    原文地址:https://ensuser.com/docs/frequently-asked-questions.html更多最新信息,请前往 ENS 中文服务站点:ENSUser 关于 ENS 注册 ...

  4. elasticsearch 5.x 系列之三 mapping 映射的时候的各个字段的设置

    首先看来创建一个mapping 来show show: curl -XPUT "master:9200/zebra_info?pretty" -H 'Content-Type: a ...

  5. 在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持)

    在KVM虚拟机中使用spice系列之二(USB映射,SSL,密码,多客户端支持) 发布时间: 2015-02-27 00:16 1.spice的USB重定向 1.1 介绍 使用usb重定向,在clie ...

  6. VMware vSphere 服务器虚拟化之二十七桌面虚拟化之View中使用Thinapp软件虚拟化

    VMware vSphere 服务器虚拟化之二十七桌面虚拟化之View中使用Thinapp软件虚拟化 VMware ThinApp 应用程序虚拟化软件是无代理解决方案,通过将应用程序隔离并封装为EXE ...

  7. .Net中的AOP系列之《拦截位置》

    返回<.Net中的AOP>系列学习总目录 本篇目录 位置拦截 .Net中的字段和属性 PostSharp位置拦截 真实案例--懒加载 .Net中的懒加载 使用AOP实现懒加载 如何懒加载字 ...

  8. Citrix 服务器虚拟化之二十一 桌面虚拟化之部署Provisioning Services

    Citrix 服务器虚拟化之二十一  桌面虚拟化之部署Provisioning Services Provisioning Services 是Citrix 出品的一系列虚拟化产品中最核心的一个组件, ...

  9. VMware vSphere 服务器虚拟化之二十五 桌面虚拟化之终端服务池

    VMware vSphere 服务器虚拟化之二十五 桌面虚拟化之终端服务池 终端服务池是指由一台或多台微软终端服务器提供服务的桌面源组成的池.终端服务器桌面源可交付多个桌面.它具有以下特征: 1.终端 ...

随机推荐

  1. HTML用table布局排版 padding清零

    之前博文:HTML布局排版2如何设置div总是相对于页面居中 中是用div进行排版的,div是切了三条,顶部的图片,下部的图片,中间的平铺条,中间的div不设高度,根据内容,该区域的大小不固定,便于后 ...

  2. 牛掰的socat工具介绍

    Socat 是 Linux 下的一个多功能的网络工具,名字来由是 「Socket CAT」.其功能与有瑞士军刀之称的 Netcat(nc) 类似,可以看做是 Netcat 的加强版.Socat 的主要 ...

  3. 克隆指定的分支:git clone -b 分支名仓库地址

    克隆指定的分支:git clone -b 分支名仓库地址 git clone -b 分支名 仓库地址 -b 是在克隆的时候制定一个分支

  4. Appium移动自动化测试-----(六)2.AppiumDesktop录制脚本生成极简脚本

    AppiumDesktop启动页面: 启动AppiumDesktop以后点击该页面右上角的Start New Session按钮,就会启动一个新的会话窗口(如下图),在这个窗口我们需要配置一些Desi ...

  5. Ubuntu16.04安装qt

    5.11官方下载网站: http://download.qt.io/official_releases/qt/5.11/5.11.1/ 可以直接下载linux系统下的.run安装包: 安装方式:htt ...

  6. LeetCode 189. 旋转数组(Rotate Array)

    189. 旋转数组 LeetCode189. Rotate Array 题目描述 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [1,2,3,4,5,6, ...

  7. [C#] - 从 HTML 代码中 转换 / 提取 可读文字(PlainText)的方法

    背景 在做网页数据分析的时候,我们关注的部分是内容,可以过滤掉HTML标签.Javascript.CSS等代码. 目标输入 <b>Hello World.</b><br/ ...

  8. python基础学习(七)

    14.return # print() 可以被执行 def doubelNumber(num): print() print() Afnum = doubelNumber() print(Afnum) ...

  9. 二维码制作分享-Python

    分享一个简单快捷的二维码制作,Python实现. 1.安装准备 已安装的Python+Pycharm的计算机.本人win7+Python3.6+Pycharm 2.库包下载安装 Python二维码制作 ...

  10. 20191125:Python中的上下文管理机制with

    20191125:with上下文管理 with是一个上下文管理器,用于执行代码块所需要的运行的时候的上下文入口和出口.上下文管理器的典型用法包括保存和还原各种全局状态,锁定和解锁资源,关闭打开的文件等 ...