Guacamole 開發web端遠程桌面 頂 原 薦

一、簡介

Apache Guacamole 是無客戶端的遠程桌面網關。它支持VNC,RDP,SSH等標準協議。guacamole的客戶端是html5 web應用程序,因此通過訪問瀏覽器,就可以訪問到遠程桌面。大家應該使用過Microsoft的mstsc,或者VNC,又或者teamviewer,這些都是基於C/S架構的遠程桌面連接組件,而guacamole卻做到了基於B/S的遠程桌面連接。下圖介紹了guacamole的整個體系:

這裏稍作講解,guacamole包括兩大部分,guacamole-client和guacamole-server。client是一個web服務器,實現了對server的遠程訪問。server則實現了client和遠程桌面服務的橋樑。server中包括了一個servlet容器,和一個guacd服務。準確來說,是這個guacd服務實現了對遠程桌面服務的代理。例如,你的遠程電腦中安裝了一個vnc服務器,那麼這個guacd就你能實現從guacamole到這個vnc服務器的連接,完成代理工作。一個完整的guacamole應用體系,至少應該是這樣的:一個guacamole-client,一個guacamole-server, server中包括了guacd,一個遠程主機的vnc服務器。當用戶訪問client,client則將請求發送到server,server利用guacd進行協議轉化,guacd從遠程主機中的vnc服務器中獲取實時畫面,並將其返回給server,server加工處理後返回給client,用戶就能看到一個實時畫面監控的頁面了。(本文由開源中國-千里明月-原創 ,https://my.oschina.net/u/3490860/。如有雷同,純屬抄襲。)

二、適應場景

guacamole能夠實現多方面的用途,但我主要是爲了實現java-web程序的網頁遠程監控,監控內網中的一部小型服務器。這樣子的話,我起碼需要三個東西,一個web服務器,一個guacamole服務器部署在Linux上,一個vnc服務(guacamole支持不同的遠程協議,rdp、vnc等,我只實現vnc)部署在遠程主機上。要完成這麼一個工程,需要各個方面的環境搭建,下面一一介紹。

安裝環境:

我以centOS系統作爲guacamole服務器的承載,工具使用secureCRT,通過SFTP傳輸文件。SFTP的基本命令如下:

pwd   查看遠程服務器當前目錄;
lpwd  查看本地系統的當前目錄。
cd <dir>   將遠程服務器的當前目錄更改爲<dir>;
lcd <dir>  將本地系統的當前目錄更改爲<dir>。
ls 顯示遠程服務器上當前目錄的文件名;
ls -l  顯示遠程服務器上當前目錄的文件詳細列表;
ls <pattern> 顯示遠程服務器上符合指定模式<pattern>的文件名;
ls -l <pattern>  顯示遠程服務器上符合指定模式<pattern>的文件詳細列表。
lls 顯示本地系統上當前目錄的文件名;
lls的其他參數與ls命令的類似。
get <file> 下載指定文件<file>;
get <pattern> 下載符合指定模式<pattern>的文件。
put <file> 上傳指定文件<file>;
get <pattern> 上傳符合指定模式<pattern>的文件。
progress 切換是否顯示文件傳輸進度。
mkdir <dir> 在遠程服務器上創建目錄;
lmkdir <dir> 在本地系統上創建目錄。

 

三、安裝jdk

部署guacamole需要jdk和tomcat,先下載jdk8,下載地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

將文件通過SFTP傳入CentOS,tar -zvxf 命令解壓,重命名爲java8。然後,配置環境變量。

輸入: sudo vim /etc/profile  編輯環境變量。

在/etc/profile文件末尾加入: 

export JAVA_HOME=java8的路徑(可以進入java8目錄使用命令“pwd”查看)
export PATH=$JAVA_HOME/bin:$PATH 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

編輯好之後,保存退出。輸入:source /etc/profile 更新環境變量。

爲了驗證環境變量是否配置好,可以輸入$JAVA_HOME 查看,如果顯示出一行目錄,則正常。

再驗證jdk是否配置成功,輸入:java -version 如果輸入一下類似信息,則成功。

java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

四、安裝tomcat

        tomcat要8.0以上版本就行,下載地址:https://tomcat.apache.org/download-80.cgi

一樣的方式,將tomcat傳入了Linux,解壓,命名爲tomcat。編輯環境變量

export CATALINA_HOME=/home/yue/tomcat
export CATALINA_BASE= /home/yue/tomcat        

最後的/etc/profile文件配置的所有環境變量如下:

執行 source /etc/profile 使環境變量生效

進入tomcat  的bin目錄

輸入./shtartup.sh

如果輸出類似tomcat started的啓動信息 ,則沒問題。但是我們必須保證並且內網能夠用http://ip:8080的方式訪問tomcat,如果不行,看看是不是防火牆或者ip限制的問題,具體設置可以查看iptables的資料 http://man.linuxde.net/iptables。如果不在乎安全問題,可以直接關閉防火牆。

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT               #允許本地迴環接口(即運行本機訪問本機)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    #允許已建立的或相關連的通行
iptables -A OUTPUT -j ACCEPT         #允許所有本機向外的訪問
iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #允許訪問22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #允許訪問80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允許ftp服務的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允許FTP服務的20端口
iptables -A INPUT -j reject       #禁止其他未允許的規則訪問
iptables -A FORWARD -j REJECT     #禁止其他未允許的規則訪問

我這邊是已經配置成功了:

 

五、安裝必須的依賴庫

前面提到,Guacamole分爲兩部分:提供guacd代理和相關庫的 guacamole-server,以及爲servlet容器(通常爲Tomcat)提供客戶端的guacamole-client。現在就先構建server。

guacamole-server 包含了guacamole連接到遠程桌面的必要組件,這些組件需要依賴一些庫。

guacd是guacamole-server的守護進程,接收來自web應用的隧道連接,然後代表guacamole連接到遠程桌面。

安裝必須的庫,來自官方的整理,以下這些庫都是必須安裝的。

輸入不同命令安裝:

sudo yum install cairo-devel

sudo yum install libjpeg-turbo-devel  這個如果安裝不了就使用 sudo yum install libjpeg-devel

sudo yum install libpng-devel

sudo yum install uuid-devel

另外還有兩個必須安裝的

sudo yum install ffmpeg-devel

sudo yum install libvncserver-devel

 

六、安裝server

下一步,http://guacamole.apache.org/releases/0.9.14/ 這裏下載guacamole-client和server的tar包,通過secureCRT傳到Linux,在Linux解壓,tar -zxvf 文件名。

在Linux上home/yue目錄下新建guacamole文件夾,將解壓後的server和client包移動進去。

進入解壓後的server包,guacamole-server-0.9.14目錄下,執行以下命令:

sudo .configure --with-init-dir=/etc/init.d

sudo make

sudo make install

ldconfig  (更新系統已安裝庫的緩存)

執行:  guacd 

彈出消息 guacd[23084]: INFO:     Guacamole proxy daemon (guacd) version 0.9.14 started  證明server安裝成功了。

 

七、安裝client

安裝guacamole-client(即web服務器)

進入guacamole-client-0.9.14 執行:

mvn package

$ mvn package
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] guacamole-common
[INFO] guacamole-ext
[INFO] guacamole-common-js
[INFO] guacamole
[INFO] guacamole-auth-jdbc
[INFO] guacamole-auth-jdbc-base
[INFO] guacamole-auth-jdbc-mysql
[INFO] guacamole-auth-jdbc-postgresql
[INFO] guacamole-auth-ldap
[INFO] guacamole-auth-noauth
[INFO] guacamole-client
...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] guacamole-common ................................... SUCCESS [  7.566 s]
[INFO] guacamole-ext ...................................... SUCCESS [  5.594 s]
[INFO] guacamole-common-js ................................ SUCCESS [  1.249 s]
[INFO] guacamole .......................................... SUCCESS [  8.474 s]
[INFO] guacamole-auth-jdbc ................................ SUCCESS [  0.592 s]
[INFO] guacamole-auth-jdbc-base ........................... SUCCESS [  2.548 s]
[INFO] guacamole-auth-jdbc-mysql .......................... SUCCESS [  2.557 s]
[INFO] guacamole-auth-jdbc-postgresql ..................... SUCCESS [  1.990 s]
[INFO] guacamole-auth-ldap ................................ SUCCESS [  1.314 s]
[INFO] guacamole-auth-noauth .............................. SUCCESS [  0.961 s]
[INFO] guacamole-client ................................... SUCCESS [  1.721 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 34.701 s
[INFO] Finished at: 2015-06-08T17:03:15-07:00
[INFO] Final Memory: 34M/340M
[INFO] ------------------------------------------------------------------------
$

如果,你沒有mvn包,那麼請先yum install maven

這個時候在當前目錄的guacamole/target目錄下,會有個guacamole-0.9.14.war包。將這個包複製到tomcat的webapps目錄下。這個tomcat就用我們上面配置好的。

sudo cp guacamole-0.9.14  tomcat的webapps目錄/guacamole.war

好了,啓動tomcat,局域網內訪問服務器的8080端口, http://ip:8080/guacamole,你會看到這樣的畫面

但是此時,你點擊登錄是沒有任何作用的,因爲還要配置一些東西。

 

八、配置guacamole的環境:

 

1、GUACAMOLE_HOME

GUACAMOLE_HOME是Guacamole的默認配置目錄,可在/etc/profile中指定此目錄:

末尾加入  export GUACAMOLE_HOME=/home/yue/guacamole

當然如果不做配置,guacamole也會默認將/etc/guacamole作爲GUACAMOLE_HOME,但是你需要自己去新建這個目錄。爲了方便,我將它配置成了和server包,client包同一目錄。即/home/yue/guacamole

在該目錄下新建

guacamole.properties

這是主要的Guacamole配置文件。該文件中的屬性規定了Guacamole將如何連接到guacd。在文件中寫入:

guacd-hostname:localhost
guacd-port:4822

2、新建logback.xml

Guacamole使用稱爲Logback的日誌系統來處理所有消息。默認情況下,Guacamole只會登錄到控制檯,但可以通過提供你自己的Logback配置文件來改變它。我們寫成這樣就好:guacamole運行時,會生成guacamole.log在當前目錄,記錄所有debug級別的日誌。

<configuration>
 <appender name="FILE" class="ch.qos.logback.core.FileAppender">
  <file>/home/yue/guacamole/guacamole.log</file>
   <encoder>
     <pattern>%msg%n</pattern>
   </encoder>
 </appender>
 <root level="debug">
   <appender-ref ref="FILE" />
 </root>
</configuration>

3.新建user-mapping.xml  寫入

<user-mapping>
    <authorize username="test" password="test">
        <protocol>vnc</protocol>
        <param name="hostname">192.168.162.15</param>
        <param name="port">5900</param>
    </authorize>
</user-mapping>

這裏是說,新增一個vnc服務器,服務器地址爲192.168.162.15,vnc所有端口爲5900,guacamole連接這個vnc服務器的用戶名和密碼爲test,test。接下來的操作,不用我說也知道,

如果想配置多個連接,就寫多個authorize節點。

到此爲止,GUACAMOLE_HOME的目錄下現在一共有一下幾個文件,

guacamole-client-0.9.14   
guacamole-server-0.9.14 
guacamole.properties    
logback.xml  
user-mapping.xml

user-mapping.xml文件寫入後,guacamole會自動去讀取,等一會兒後,就能生效,不需要重啓guacd或者tomcat。

不過,如果你以爲這樣就能完事的話,那就錯了 ,因爲還差最後一步,遠程主機vnc服務器的搭建!

九、vnc服務器搭建

vnc-server下載地址 https://www.realvnc.com/en/connect/download/vnc/

在遠程主機安裝vnc-server,我這裏的遠程主機是window系統,ip地址爲192.168.162.15,所以直接安裝exe就好。爲了測試容易,把防火牆也關了吧,免得存在訪問限制問題。vnc服務器需要關閉密碼保護, 不然guacamole不能連接成功,端口也設置成5900。大概設置如下

好了,這個時候在guacamole登錄頁面上輸入test,test登錄,就能看到遠程主機的實時畫面了。

 

下一篇博客,我將會寫如果自己構建web程序,代替guacamole-client,並嵌入到java程序中,實現web系統集成guacamole。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章