Apache Guacamole 是無客戶端的遠程桌面網關。它支持VNC,RDP,SSH等標準協議。guacamole的客戶端是html5 web應用程序,所以經過訪問瀏覽器,就能夠訪問到遠程桌面。你們應該使用過Microsoft的mstsc,或者VNC,又或者teamviewer,這些都是基於C/S架構的遠程桌面鏈接組件,而guacamole卻作到了基於B/S的遠程桌面鏈接。下圖介紹了guacamole的整個體系:html
這裏稍做講解,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/。若有雷同,純屬抄襲。)html5
guacamole可以實現多方面的用途,但我主要是爲了實現java-web程序的網頁遠程監控,監控內網中的一部小型服務器。這樣子的話,我起碼須要三個東西,一個web服務器,一個guacamole服務器部署在Linux上,一個vnc服務(guacamole支持不一樣的遠程協議,rdp、vnc等,我只實現vnc)部署在遠程主機上。要完成這麼一個工程,須要各個方面的環境搭建,下面一一介紹。java
我以centOS系統做爲guacamole服務器的承載,工具使用secureCRT,經過SFTP傳輸文件。SFTP的基本命令以下:mysql
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> 在本地系統上建立目錄。
部署guacamole須要jdk和tomcat,先下載jdk8,下載地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htmllinux
將文件經過SFTP傳入CentOS,tar -zvxf 命令解壓,重命名爲java8。而後,配置環境變量。web
輸入: sudo vim /etc/profile 編輯環境變量。sql
在/etc/profile文件末尾加入: apache
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 更新環境變量。vim
爲了驗證環境變量是否配置好,能夠輸入$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要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
下一步,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安裝成功了。
安裝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_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
二、新建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-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。