在ubuntu中搭建guacamole


【寫於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這兩個配置文件的具體使用方法。(英文文章)


免責聲明!

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



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