【寫於2016年8月15日】
【由於我目前沒有時間嘗試其他linux系統下的搭建工作,所以這篇帖子僅針對在ubuntu下搭建guacamole的情況】
在搭建guacamole之前,需要先准備好操作系統環境,如果可行的話,建議安裝最新版的ubuntu(我用一個舊版本(12.04)的搭建的時候,遇到了一些依賴項太老而不兼容的問題,在換了最新版的ubuntu16.04后,這些問題,都沒再出現)。這里提供了兩種安裝方式,可以根據自己的需求任選其一。
在開始之前,先理解guacamole的架構。這幅圖來自guacamole官網(http://guacamole.incubator.apache.org/)。在官網的教程中,整個guacamole項目分為兩個部分,guacamole-client和guacamole-server。在官網的教程里,這幅圖里的guacd就是guacamole-server,這幅圖里Servlet Container里的Guacamole就是guacamole-client(為什么如此呢?我的理解是:guacd編譯好之后,是作為一個守護進程,獨立運行的。它負責與具體的RDP Server/VNC Server等溝通。而Servlet Container里的Guacamole被發送到瀏覽器里,作為最終的client與guacd這個server交互)。
0.系統概覽
guacamole作為代理,連接任意位置的RDP server(guacamole和rdp server可以在同一台機器上)。手機和PC,只要有瀏覽器,且瀏覽器支持HTML5,那么就可以用瀏覽器訪問guacamole代理。
1.最簡安裝方式
首先是有一個最簡的安裝過程,共三個步驟。
1 $ apt-get install guacamole-tomcat
然后是設置web容器(這里是tomcat7,也可能是其他版本的tomcat,也可能是其他web容器)。這是告訴tomcat,guacamole.war(這個war包及其配置文件,就是guacamole-client) 以及其配置文件在哪里。
1 $ ln -s /var/lib/guacamole/guacamole.war /var/lib/tomcat7/webapps 2 $ ln -s /etc/guacamole/guacamole.properties /usr/share/tomcat7/.guacamole
然后是設置配置文件,這是告訴guacamole-client,自己的設置是什么。guacamole-client的配置文件有兩個。guacamole.properties和user-mapping.xml。前者主要告訴guacamole-client,guacd(guacamole-server)的地址和端口號,以及user-mapping.xml的位置等。后者主要設置最終用戶登錄guacamole時的用戶名和密碼,以及,guacamole要訪問的最終RDP Server/VNC Server的ip地址和密碼。在這個最簡安裝方法中,guacamole.properties自己已經配置好,無需修改,只需要修改user-mapping.xml的內容。下面來看一下user-mapping.xml的內容。
<user-mapping> <authorize username="guacamoleusername" password="5f4dcc3b5aa765d61d8327deb882cf99" encoding="md5"> <connection name="SSH1"> <protocol>ssh</protocol> <param name="hostname">192.168.0.18</param> <param name="port">22</param> <param name="username">gacanepa</param> </connection> <connection name="RDP2"> <protocol>rdp</protocol> <param name="hostname">192.168.0.19</param> <param name="port">3389</param> <param name="password">123456</param> </connection> </authorize> </user-mapping>
<authorize>標簽里的,username和password是用戶在瀏覽器里登錄guacamole的時候,要求的用戶名和密碼。這里的password是字符串“password”的md5值(這里也可以把參數password設為明文,然后不要encoding="md5")。隨后的<connection>標簽,是設置要訪問的RDP Server/VNC Server的ip地址和訪問協議和訪問密碼。如果最終的RDP Server/VNC Server不需要密碼,則可以不要<connection>里的<param name="password“>的項。<connection>項可以有一個或者多個(這個示例里有兩個),guacamole支持多個連接,這一點可以從官網首頁的演示視頻里看到效果。
到這里,最簡安裝方式就完成了。
(我在安裝的時候,只在ubuntu12.04下進行過最簡安裝,這個時候,這種最簡安裝方式是不支持rdp代理的。rdp代理的那個模塊沒有被包含進來。隨后在ubuntu16.04中,沒有嘗試最簡安裝,不清楚此時最簡安裝是否支持rdp代理)
這里的最簡安裝支持vnc。在<connection>里配置任何位置的一個VNC Server都是可以的。只要保證VNC Server可訪問就可以了。我這里是用的本機上vnc4server。
如果你跟我一樣,也是訪問的是ubuntu里的vnc4server,要提前做一個設置。打開桌面共享的設置(中文可以直接搜索 桌面共享)。選中允許“其他人查看您的桌面”。另外下邊的“必須對為對本機器的每次訪問都進行確認”這一項,如果不選中,每次遠程連接,都會在這台機器上彈出一個界面問你是否允許,每次你都需要來這里手動點擊確定確認一下。所以根據你自己的安全需求,設置這個選項。(下第二張圖源於:http://itoedr.blog.163.com/blog/static/12028429720149113614962/)
啟動vnc4server
$ vnc4server
啟動guacd(guacamole-server)
$ guacd
重啟tomcat(guacamole-client)
$ sudo /etc/init.d/tomcat7 restart
然后就可以在瀏覽器里訪問了。例如
127.0.0.1:8080/guacamole
這里的ip地址,換成你運行guacamole的地址。然后就會出現如下界面,在這里輸入<authorize>標簽里設置的用戶名"guacamoleusername"和密碼"password"(我這幅圖里是我的用戶名和密碼,你換成你設置的就好了)。
就可以登錄進去了。
以上是通過最簡安裝方式部署guacamole,然后使其作為vnc代理的過程。
如果機器A訪問機器B,出現訪問失敗的情況。可以先試着ping一下,看看兩台機器是否連通,如果不能連通而網絡又沒有問題。那么試着關閉ubuntu的防火牆試一試(關閉防火牆的風險自負)。
$ sudo ufw disable
2.源代碼編譯安裝
2.1guacamole-server(guacd)的編譯和安裝
源代碼編譯安裝可以自由選擇自己需要或者不需要的功能。我這里是把全部的功能都編譯進去。
約束:ubuntu16.04 tomcat7 openjdk-8-jdk(一般來說,用最新版的就好了)。tomcat請自行安裝。
先編譯guacd。也就是guacamole-server的部分。首先需要先安裝依賴項。最好各個依賴項都安裝最新的版本(其完整的依賴項列表參見官網http://guacamole.incubator.apache.org/doc/gug/installing-guacamole.html)。按如下方式安裝依賴項
$ sudo apt-get install libcairo2-dev libjpeg62-dev libpng12-dev libossp-uuid-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libssh-dev
然后去官網下載,穩定版的源代碼。注意,可以通過git clone的方式,直接從github里克隆出來編譯,但是那是最新的版本,未經過完全測試,編譯的時候可能會有更大概率出問題,如果不是非常確定和必要,建議直接從官網提供的下載鏈接里下載,這是經過充分測試的版本,最大限度提供了對不同環境的適應性。在 http://guacamole.incubator.apache.org/releases/0.9.9/ 可以找到下載鏈接。我下載的是,截至目前,官網首頁發布的穩定版。
下載之后,解壓(下載時存儲文件的位置,解壓后的位置,其實都不重要,因為編譯流程完成后,自動就把文件放置到了合適的位置,無需手手動去把文件放置到某個確定的位置)。然后進入到guacamole-server的目錄
$ cd guacamole-server/
然后,執行configure命令,它的工作包括檢查各個依賴項的情況。
$ ./configure --with-init-dir=/etc/init.d
( 這里跟的參數的意思是,把guacd加入到隨系統啟動的列表中。)
這個命令運行的時候,會有許多輸出,也會執行一會兒時間,保持耐心。最重要的信息,它會最后輸出。不必擔心它快速滾動的很多內容沒看見。最后會出現如下圖的界面。
這里可以看到,所有的依賴項都yes,表示這些依賴項都准備好了。(這里並不是每個都是必須的,如果你不需要的功能是no,也沒關系。不過依賴項里有必要項,必要項是不能缺少的,至於哪些是必要項,官網的依賴項列表里有說明)。如果某一項是no,而你又需要,可以直接通過關鍵字搜索。安裝對應的庫。這里要注意,每個庫最好都安裝最新的。因為我編譯的時候,遇到過因為某個庫版本太舊而導致運行失敗的問題。
然后
$ make
然后
$ make install
到這里guacamole-server安裝好了。然后執行ldconfig來更新安裝庫的時候的緩存
$ ldconfig
然后,就可以
$ guacd
來運行guacd(下次系統啟動的時候,guacd會隨着系統自動啟動)。
2.2 guacamole-client的打包和安裝
2.2.1直接使用打包好的guacamole.war文件
然后是guacamole-client的部分。也就是web容器里的部分。這里其實有個簡單的方法。就是在官網下載guacamole-0.9.9.war。然后直接放置使用就可以了。因為guacamole-client其實並不需要編譯。它只是需要一個打包過程。而這個.war文件就是打包好的文件。
如果是按照直接下載這個guacamole-0.9.9.war的方式。那么,下載好之后(隨便下載到某個位置)。目的是告訴tomcat,guacamole-client(也就是guacamole-0.9.9.war)在哪里。可以通過創建軟鏈接的方式,也可以通過直接把.war文件拷貝過去的方式。這里使用直接把.war文件拷貝過去的方式。
$ cp /Downloads/guacamole/guacamole-0.9.9.war /var/lib/tomcat7/webapps/guacamole.war
注意,拷貝過去后,文件名一定要改為guacamole.war。
2.2.2手動打包
如果卻有必要,可以下載guacamole-client的源碼手動打包。最好使用與guacamole-server相同的版本。在官網下載穩定版的guacamole-client的源碼(http://guacamole.incubator.apache.org/releases/0.9.9/)。
然后,解壓縮。進入到這個目錄
$ cd guacamole-client-0.9.9/
然后執行
$ mvn package
打包成功后,會輸出build success的信息。打包完成后,在當前目錄的子目錄guacamole/target(也就是guacamole-client-0.9.9/guacamole/target)中,有guacamole-0.9.9.war文件。按照2.2.1的方式,將其放置到tomcat容器中。記得改名字。
2.2.3配置guacamole-client
然后就是,最簡安裝方式里也提到過的配置文件的問題。guacamole.properties 和user-mapping.xml。按現在的方法安裝的過程中,到現在,是沒有guacamole.properties 和user-mapping.xml這兩個文件的。需要自己手動創建。然后填入內容。先創建兩個目錄(如果已經存在,就不要再創建)
# mkdir /etc/guacamole # mkdir /usr/share/tomcat7/.guacamole
然后創建文件
# touch /etc/guacamole/guacamole.properties
在剛剛創建的這個文件guacamole.properties中,插入如下內容
guacd-hostname: localhost guacd-port: 4822 user-mapping: /etc/guacamole/user-mapping.xml auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider basic-user-mapping: /etc/guacamole/user-mapping.xml
這里面user-mapping項和basic-user-mapping項都是指示user-mapping.xml文件的位置。
關於user-mapping.xml的內容。請參見第一種方法里user-mapping.xml文件的內容。這里是一樣的。設置好自己要訪問的遠程桌面的server的位置和密碼。
然后創建一個軟連接,告訴tomcat到哪里去找guacamole.properties這個配置文件。
# ln -s /etc/guacamole/guacamole.properties /usr/share/tomcat7/.guacamole/
然后是修改配置文件的權限和所有者(否則tomcat即使找到了配置文件也沒有權限去讀它)
# chmod 600 /etc/guacamole/user-mapping.xml # chown tomcat7:tomcat7 /etc/guacamole/user-mapping.xml
然后重啟tomcat。啟動guacd。就完成了。在瀏覽器里訪問
127.0.0.1:8080/guacamole
登錄進去。就能看到遠端桌面了。
這是我配置一個例子。瀏覽器通過guacamole代理訪問RDP Server(這里是virtualbox,它支持RDP協議的遠程桌面)。
參考文章:
http://itoedr.blog.163.com/blog/static/12028429720149113614962/
這個鏈接提供了最簡安裝方式。
http://www.cnblogs.com/ji-yun/p/5657709.html
這個鏈接提供了官網安裝教程的中文翻譯
http://www.tecmint.com/guacamole-access-remote-linux-windows-machines-via-web-browser/
這個鏈接提供了完整安裝教程,特別是guacamole.properties和user-mapping.xml這兩個配置文件的具體使用方法。(英文文章)