簡(jiǎn)介
Guacamole是一個(gè)提供遠(yuǎn)程桌面解決方案的開源項(xiàng)目,通過瀏覽器就能操作虛擬機(jī),適用于Chrome、Firefox隘截、IE9+等瀏覽器(瀏覽器需要支持HTML5)。只要在一個(gè)服務(wù)器成功安裝Guancamole汹胃,就可以通過訪問一個(gè)web瀏覽器去操作我們配置好的虛擬機(jī)婶芭。當(dāng)然,作為一個(gè)開源的項(xiàng)目着饥,我們可以對(duì)Guacamole做相應(yīng)的定制修改犀农,使其適配我們的項(xiàng)目需求,比如做成自動(dòng)登錄的宰掉,加上項(xiàng)目權(quán)限驗(yàn)證等呵哨。
Guacamole一基于HTML5的遠(yuǎn)程桌面控制框架,性能較高轨奄,官方說接近于原生的VNC孟害,Guacamole不是一個(gè)獨(dú)立的Web應(yīng)用程序,而是由許多部件組成的挪拟。Web應(yīng)用程序?qū)嶋H上是整個(gè)項(xiàng)目里最小最輕量的挨务,大部分的功能依靠Guacamole的底層組件來完成,整個(gè)項(xiàng)目的構(gòu)建如下圖:

從上圖可以看出玉组,guacamole結(jié)構(gòu)上分為4層谎柄,建議先閱讀下 guacamole實(shí)現(xiàn)結(jié)構(gòu) 和 guacamole協(xié)議,就可以對(duì)Guacamole的架構(gòu)和協(xié)議有個(gè)基本的認(rèn)識(shí)惯雳。
Guacamole程序的流程簡(jiǎn)述如下:用戶通過瀏覽器連接到Guacamole的服務(wù)端朝巫,Guacamole的客戶端是用javascript編寫的,Guacamole Server通過Web容器(比如Tomcat)把服務(wù)提供給用戶吨凑。一旦加載捍歪,客戶端通過http承載著Guacamole自己的定義的協(xié)議與服務(wù)端通信户辱。部署在Guacamole Server這邊的Web應(yīng)用程序,解析到的Guacamole protocal糙臼,就傳給Guacamole的代理guacd庐镐,這個(gè)代理(guacd)實(shí)際上就是解析Guacamole protocal,替用戶連接到遠(yuǎn)程機(jī)器变逃,Guacamole protocal協(xié)議本身以及guacd的存在必逆,實(shí)現(xiàn)了協(xié)議的透明:Guacamole客戶端(瀏覽器運(yùn)行的JS)和Web應(yīng)用程序,都不需要知道遠(yuǎn)程桌面具體用哪個(gè)協(xié)議(VNC,RDP etc)揽乱,分為4個(gè)大的部分:
- JS (WebSocket/xmlhttprequest + canvas)名眉,普通的用戶看到的部分,使用的HTML5與后臺(tái)進(jìn)行交互凰棉;
- JavaServlet:處理與用戶的交互损拢,將頁面上的操作請(qǐng)求處理下,再直接與下層的guacd來交互撒犀;
- guacd, 底層的daemon福压,封裝了各種RDP協(xié)議的中間層,如VNC等或舞;
- libfreerdp荆姆,libssh等,各種通信協(xié)議映凳,會(huì)被封裝成Guacamole的協(xié)議胆筒;
而關(guān)于Guacamole的協(xié)議 ,JS與JavaServlet诈豌,Servlet與guacd交互仆救,都是采用這種格式。
部署環(huán)境和優(yōu)勢(shì)
- Guacamole完全基于瀏覽器队询,不必安裝JRE派桩、RDP构诚、VNV等客戶端插件蚌斩,不需要考慮客戶的機(jī)器環(huán)境;
- Guacamole可以通過一臺(tái)授權(quán)機(jī)器管理多臺(tái)服務(wù)器范嘱,免于多個(gè)管理端登錄送膳;
- Guacamole可以穿透防火墻,通過一臺(tái)服務(wù)器管理內(nèi)容的其它不對(duì)外提供網(wǎng)絡(luò)服務(wù)的設(shè)備丑蛤;
- 在云項(xiàng)目中叠聋,我們可以通過數(shù)據(jù)庫或者XML文件,配置KVM虛擬機(jī)的端口受裹,直接通過網(wǎng)頁管理虛擬機(jī)碌补,無需再次驗(yàn)證虏束,直接登錄;
- Guacamole基于HTML5的遠(yuǎn)程桌面控制框架厦章,性能較高镇匀,官方說接近于原生的VNC,對(duì)于一些臨時(shí)性管理和查看任務(wù)足夠了袜啃;
安裝環(huán)境說明
操作系統(tǒng):CentOS6.3 x86-64
JDK:JDK6
Tomcat:Tomcat7
Guacamole服務(wù)器:guacamole-server-0.9.9.tar.gz
Guacamole客戶端:guacamole-0.9.9.war
安裝JDK和Tomcat
JDK和Tomcat的安裝過程汗侵,這里不再贅述。
安裝guacamole服務(wù)器
1.安裝依賴包
為了保證我們的server正常安裝群发,我們需要先安裝以下依賴:
# 安裝Cairo
yum install -y cairo cairo-devel
# 安裝libpng
yum install -y libpng libpng-devel
# 安裝FreeRDP
yum install -y freerdp freerdp-devel
# 安裝Pango
yum install -y pango pango-devel
# 安裝libssh2
yum install -y libssh2 libssh2-devel
# 安裝libtelnet
yum install -y libtelnet libtelnet-devel
# 安裝libVNCServer
yum install -y libvncserver libvncserver-devel
# 安裝libpulse
yum install -y pulseaudio pulseaudio-libs pulseaudio-libs-devel
# 安裝libssl
yum install -y openssl openssl-devel
# 安裝libvorbis
yum install -y libvorbis libvorbis-devel
# 安裝OSSP UUID
yum install -y uuid uuid-devel
說明:如需連接VNC還需安裝VNC_Server
2.編譯安裝guacamole_server源碼包
接下來編譯下載好的guacamole-server-0.9.9.tar.gz源碼包晰韵,執(zhí)行如下命令:
# 解壓源碼包
tar -xvzf guacamole-server-0.9.9.tar.gz
# 進(jìn)入到解壓目錄下
cd guacamole-server-0.9.9/
# 執(zhí)行configure進(jìn)行腳本配置,并將guacd的啟動(dòng)腳本置于/init.d目錄下
./configure --with-init-dir=/etc/init.d
# 編譯guacamole_server源碼
make
# 安裝創(chuàng)建完的組件
make install
# 更新已安裝庫的系統(tǒng)緩存
ldconfig
3.配置guacamole服務(wù):
# 修改guacd啟動(dòng)腳本的所屬者和所屬群體
chown root.root /etc/init.d/guacd
# 修改guacd啟動(dòng)腳本的權(quán)限
chmod 755 /etc/init.d/guacd
# 增加guacd啟動(dòng)腳本為系統(tǒng)服務(wù)
chkconfig --add guacd
# 設(shè)置guacd在各執(zhí)行等級(jí)為開啟狀態(tài)
chkconfig guacd on
配置完成后熟妓,以下四條命令用于控制guacd服務(wù):
# 啟動(dòng)guacd服務(wù)
service guacd start
# 停止guacd服務(wù)
service guacd stop
# 重啟guacd服務(wù)
service guacd restart
# 查看guacd服務(wù)狀態(tài)
service guacd status
安裝Guacamole客戶端
1.首先新建配置文件:
# 創(chuàng)建路徑
mkdir /etc/guacamole
# 創(chuàng)建路徑
mkdir /root/.guacamole
# 創(chuàng)建配置文件guacamole.properties
touch /etc/guacamole/guacamole.properties
# 創(chuàng)建配置文件user-mapping.xml
touch /etc/guacamole/user-mapping.xml
# 創(chuàng)建軟連接
ln -s /etc/guacamole/guacamole.properties /root/.guacamole/
2.設(shè)置配置文件內(nèi)容:
guacamole.properties
是Guacamole客戶端的一個(gè)主要配置文件雪猪,由此我們可以設(shè)置session超時(shí)、可用語言起愈、host端口浪蹂、port端口、ssl等等告材,在本例中坤次,我們僅添加如下內(nèi)容:
# 配置基本用戶映射
basic-user-mapping: /etc/guacamole/user-mapping.xml
接下來配置user-mapping.xml
,該XML文件的根節(jié)點(diǎn)為<user-mapping>
斥赋,向其中插入如下內(nèi)容缰猴,每一個(gè)<authorize>
節(jié)點(diǎn)為一個(gè)用戶配置,每一個(gè)<connection>
節(jié)點(diǎn)為一個(gè)授權(quán)鏈接配置:
<!-- 每名用戶的配置信息和權(quán)限 -->
<authorize username="USERNAME" password="PASSWORD">
<protocol>vnc</protocol>
<param name="hostname">localhost</param>
<param name="port">5900</param>
<param name="password">VNCPASS</param>
</authorize>
<!-- 另一個(gè)用戶疤剑,該用戶采用MD5加密 -->
<authorize
username="USERNAME2"
password="319f4d26e3c536b5dd871bb2c52e3178"
encoding="md5">
<!-- 第一個(gè)授權(quán)鏈接 -->
<connection name="localhost">
<protocol>ssh</protocol>
<param name="hostname">localhost</param>
<param name="port">22</param>
<param name="password">VNCPASS</param>
</connection>
<!-- 第二個(gè)授權(quán)鏈接 -->
<connection name="otherhost">
<protocol>vnc</protocol>
<param name="hostname">otherhost</param>
<param name="port">5900</param>
<param name="password">VNCPASS</param>
</connection>
</authorize>
配置文件配置好之后滑绒,我們需要修改/etc/profile
,向文件內(nèi)末尾追加export GUACAMOLE_HOME=/etc/guacamole
隘膘,保存修改后疑故,執(zhí)行source /etc/profile
,使其生效弯菊,以保證Guacamole能夠從系統(tǒng)環(huán)境變量中找到guacamole.properties
的位置纵势。
驗(yàn)證Guacamole服務(wù)
最后啟動(dòng)tomcat和guacd服務(wù),服務(wù)啟動(dòng)完畢后管钳,我們就可以驗(yàn)證我們的Guacamole服務(wù)了钦铁,在WEB瀏覽器中輸入以下URL:http://服務(wù)IP地址:8080/guacamole/
。然后才漆,在登錄頁面中輸入配置好的用戶名/密碼(authorize節(jié)點(diǎn)內(nèi)的用戶名/密碼)即可通過WEB頁面連接至遠(yuǎn)程服務(wù)牛曹,如下圖所示: