在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/bash
 
SERVER_KEY=server-key.pem
# creating a key for our ca
if [ ! -e ca-key.pem ]; then
 openssl genrsa -des3 -out ca-key.pem 1024
fi
# creating a ca
if [ ! -e ca-cert.pem ]; then
 openssl 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 ]; then
 openssl genrsa -out $SERVER_KEY 1024
fi
# create a certificate signing request (csr)
if [ ! -e server-key.csr ]; then
 openssl 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 ]; then
 openssl 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" ]]
then
 cp ./*.pem /etc/pki/libvirt-spice
else
 mkdir /etc/pki/libvirt-spice
     cp ./*.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)    #這行表明添加成功


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM