Guacamole實戰
一 概述
1.1 背景
最近在研究遠端登入伺服器的方式,可以用來實現登入堡壘機功能,關注到了apache的guacamole專案在此記錄下學習筆記以備後用。
1.2 guacamole是什麼
guacamole是一種HTML5 Web應用程式,可使用遠端桌面協議(例如VNC或RDP)提供對桌面環境的訪問。guacamole也是產生此Web應用程式的專案,並提供驅動它的API。該API可用於為其他類似的應用程式或服務提供支援。“ Guacamole”最常用於指代Guacamole專案使用其API生成的Web應用程式。此Web應用程式是堆疊的一部分,該堆疊提供了與協議無關的遠端桌面閘道器。Guacamole的客戶端部分使用JavaScript編寫,僅使用HTML5和其他標準,在訪問所提供的任何桌上型電腦時,僅需要現代的Web瀏覽器或啟用Web的裝置即可。從歷史上看,鱷梨醬是HTML5 VNC客戶端,在此之前,JavaScript Telnet客戶端稱為RealMint(“ RealMint”是“ terminal”的字謎),但是情況不再如此。Guacamole的體系結構已發展為通常包含遠端桌面,並且可以用作任何數量的計算機的閘道器。最初是概念驗證的鱷梨調味醬現在效能足以滿足日常使用,並且所有鱷梨調味醬的開發都在鱷梨調味醬上完成。作為一種API,Guacamole提供了一種通用且有效的方法,可使用HTTP或WebSocket通過基於JavaScript的隧道流式傳輸文字資料,以及一種客戶端實現,該實現支援Guacamole協議,並與來自Windows的Guacamole協議流結合使用時可以呈現遠端顯示。隧道。它提供了跨瀏覽器的滑鼠和鍵盤事件,一個XML驅動的螢幕鍵盤以及具有硬體加速合成功能的同步巢狀層。希望通過HTML5提供遠端桌面支援的專案可以通過將API整合到其應用程式或服務中來利用Guacamole多年的研發經驗。
1.3 為什麼使用guacamole
使用guacamole的主要原因是可以在全球範圍內不受限制地訪問您的計算機。Guacamole允許從任何地方遠端訪問一個或多個桌面,而無需安裝客戶端,尤其是在無法安裝客戶端時。通過設定Guacamole伺服器,您可以從世界上幾乎任何地方的Internet上的任何其他計算機訪問網路上的任何其他計算機。甚至可以使用手機或平板電腦,而無需安裝任何東西。作為僅通過HTTP或HTTPS進行通訊的真正的Web應用程式,Guacamole允許您從任何地方訪問計算機,而無需違反工作場所的策略,也無需安裝特殊客戶端。代理或公司防火牆的存在不會阻止guacamole的使用。
1.4 從任何裝置訪問您的計算機
由於Guacamole只需要一個相當快速,符合標準的瀏覽器,因此Guacamole將在許多裝置上執行,包括手機和平板電腦。Guacamole是專門為不在乎是否具有滑鼠,鍵盤,觸控式螢幕或它們的任何組合而設計的。Guacamole背後的主要設計理念之一是,永遠不要僅僅因為您的瀏覽器具有或缺少特定功能(例如觸控事件或小螢幕)就假定您擁有特定的裝置(例如手機)。Guacamole的程式碼庫同時支援滑鼠和觸控事件,而不需要一個選擇另一個,而該介面旨在不考慮螢幕大小而可用。除錯誤外,您幾乎應該可以在帶有網路瀏覽器的任何現代裝置上使用Guacamole
1.5 guacamole架構及解析
Guacamole是一個提供了基於HTML5 web應用程式的遠端桌面代理伺服器。通過使用Guacamole伺服器,我們很輕鬆的在瀏覽器上遠端訪問Guacamole代理的主機,是一個無客戶端遠端桌面閘道器。支援標準協議,如VNC、RDP、SSH。稱他為無客戶端,是因為沒有外掛和客戶端軟體被要求。由於HTML5,一旦Guacamole 被安裝到服務端,通過web 瀏覽器就可以訪問你的桌面。
我們可以在瀏覽器訪問Guacamole頁面的時候,此時,瀏覽器會通過HTTP使用Guacamole協議與Guacamole 伺服器中的Web伺服器進行連線。Guacamole Web應用會從使用者的請求中讀取Guacamole協議,並將其轉發給guacd(本地Guacamole代理)。Guacd根據web 應用轉發過來的Guacamole協議來代替使用者連線到遠端桌面伺服器。在Guacamole Web應用與guacd進行通訊的時候,兩者均不需要知道實際使用的遠端桌面協議是什麼,即協議不可知性。
- 架構解析
使用者通過瀏覽器連線到Guacamole的服務端,Guacamole通過JS寫的客戶端是為使用者提供服務,服務端和客戶端的通訊是基於HTTP的私有協議; web應用就是將瀏覽器客戶端的內容接受處理並轉發guacd,就是一個本地代理,Guacamole的協議和提供給guacd的協議是無關的,Guacamole的客戶端和web應用不需要知道具體執行的什麼協議.
- Guacamole協議
web應用完全不需要理解遠端桌面協議,但必須要理解Guacamole的協議(遠端顯示渲染和事件傳輸),而作為一個遠端顯示和互動協議,Guacamole是現有遠端連線協議的集合. 想讓Guacamole支援一個新的協議 只需要下一個"翻譯"協議的中間層即可. 這個中介軟體就是guacd。
- Guacd
guacd是Guacamole動態支援多種遠端桌面協議(這裡統稱為客戶端外掛)和基於web連線遠端桌面協議的核心. guacd是一個安裝在Guacamole上後臺執行的守護程式,等待來自web的連線. guacd也不需要理解特定的遠端桌面協議,一旦客戶端外掛開始啟動,他和guacd獨立執行,並且擁有和web應用完全的同學許可權.
-
web應用
web應用是直接和使用者交付的元件.web應用不理解遠端桌面協議,但依賴guacd; web應用的唯一左右就是提供一個漂亮的web介面和認證. 我們目前用java來寫的web應用,但他可以基於任何語言重寫; Guacamole的重點在於API.
- RealMint
Guacamole現在是一個通用的遠端桌面閘道器,但並不絕對. Guacamole開始於一個純淨的基於文字的JS寫的名字叫做ReaMint的telnet客戶端,這個主意起源於演示,之所以出名主要是由於他是純JS寫的.
RealMint的隧道主要是用PHP寫的,相對於Guacamole的HTTP的隧道,RealMint的隧道只是簡單的長輪詢,並且效率低下. 但是RealMint的鍵盤部分實現的很好,目前吸收到了Guacamole中,但也僅此而已了.
- VNC客戶端
一旦開發者掌握了HTML5的canvas標籤,並且看到他已經被Firefox和Chrome支援了,就有人想做個JS的的VNC客戶端的POC. 這個客戶端是純JS實現的,客戶端用的JAVA,通過將VNC翻譯為XML版的. 該客戶端的開發是基於VNC本身功能驅動的,開發範圍限制於將一個單獨的連線轉發給一組使用者. 雖然看法速度不是很快,但是足夠POC和專案需求了. 在SourceForge上通過Guacamole。
- 遠端桌面閘道器
開發一個基於文字協議的快速協議即可代表多個遠端管理協議. 整個系統以後臺執行形式重新構建了,專案的範圍擴充套件到相對於一個快速的HTML5的遠端桌面協議功能足夠的VNC客戶端和通用API. 現在Guacamole可以用作一箇中心閘道器來連線多個執行不同協議的桌面. 同時也提供可擴充套件的認證,當然這裡就需要可以通過HTML5訪問的一個通用API.
二 安裝部署
guacamole分為兩部分,server和client,client端一半都用sdk來程式碼整合或API來在自己的業務中來實現呼叫
2.1 編譯安裝guacamole server
guacamole-server提供的guacenc實用程式將螢幕錄製內容轉換為視訊,它依賴於FFmpeg,只有在至少安裝了FFmpeg提供的libavcodec,libavutil和libswscale庫的情況下才能構建。
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum clean all
yum install epel-release -y
yum install -y freerdp-plugins gcc gnu-free-mono-fonts pv libjpeg-devel freerdp-devel libssh2-devel libvorbis-devel libwebp-devel pulseaudio-libs-devel libvncserver-devel libssh-devel pango-devel ffmpeg ffmpeg-devel openssl-devel dialog libtelnet-devel wget cairo-devel libpng-devel uuid-devel
yum localinstall http://sourceforge.net/projects/libjpeg-turbo/files/libjpeg-turbo-official-1.5.2.x86_64.rpm -y
ln -vfs /opt/libjpeg-turbo/include/* /usr/include/
ln -vfs /opt/libjpeg-turbo/lib??/* /usr/lib64/
cd /tmp
wget http://sourceforge.net/projects/guacamole/files/current/source/guacamole-server-0.9.14.tar.gz
tar -xvpf guacamole-server-0.9.14.tar.gz
cd guacamole-server-0.9.14
./configure --with-init-dir=/etc/init.d
make && make install
ldconfig
複製程式碼
三 guacamole配置
安裝Guacamole之後,您需要先配置使用者和連線,然後Guacamole才能工作。本章介紹了guacamole的常規配置及其預設身份驗證方法的使用。
Guacamole的預設身份驗證方法從一個名為user-mapping.xml的檔案中讀取所有使用者和連線。此身份驗證方法旨在為:
- 足夠用於Guacamole的小型部署。
- 一種相對容易的方法來驗證Guacamole是否已正確設定。
不管使用哪種身份驗證方法,Guacamole的配置始終由兩個主要部分組成:一個名為GUACAMOLE_HOME的目錄,它是配置檔案的主要搜尋位置;以及guacamole.properties,它是Guacamole及其副檔名使用的主要配置檔案。
3.1 GUACAMOLE_HOME(/etc/guacamole)
GUACAMOLE_HOME是Guacamole的配置目錄的名稱,預設情況下位於/ etc / guacamole。所有配置檔案,副檔名等都位於此目錄中。GUACAMOLE_HOME的結構經過嚴格定義,幷包含以下可選檔案:
- guacamole.properties
guacamole的主要配置檔案。該檔案中的屬性決定了guacamole如何連線到guacd,並可以配置已安裝的身份驗證擴充套件的行為。
- logback.xml
guacamole對所有訊息使用稱為Logback的日誌記錄系統。預設情況下,Guacamole僅將日誌記錄到控制檯,但是您可以通過提供自己的Logback配置檔案來更改它。
- extensions/
所有Guacamole擴充套件程式的安裝位置。guacamole會在啟動時自動載入此目錄中的所有.jar檔案。
- lib/
guacamole副檔名所需的庫的搜尋目錄。guacamole將使該目錄中的.jar檔案可用於所有副檔名。如果您的擴充套件需要其他庫,例如資料庫驅動程式,那麼在這裡放置它們是適當的地方。
覆蓋GUACAMOLE_HOME
如果您不能或不希望將/ etc / guacamole用於GUACAMOLE_HOME,則可以通過以下任何一種方法來覆蓋該位置:
- 在執行servlet容器的使用者的主目錄中建立一個名為.guacamole的目錄。如果該目錄存在,它將自動用於GUACAMOLE_HOME。
- 使用環境變數GUACAMOLE_HOME指定備用目錄的完整路徑。確保查閱servlet容器的檔案,以確定如何正確設定環境變數。
- 使用系統屬性guacamole.home指定備用目錄的完整路徑。
3.2 guacamole.properties
-
名字為guacamole.properties的檔案是Guacamole web應用程式使用的主要配置檔案。Guacamole或它的其它擴充套件通過讀取該檔案能夠定位所有配置屬性。
在之前的發行版中,這個檔案必須在你的servlet容器類路徑中。現在,guacamole.properties能夠被環境變數或系統屬性指定路徑,只有類路徑才被作為最後的途徑。在Guacamole搜尋guacamole.properties時會按順序檢查:
1. 在上面定義的GUACAMOLE_HOME中。
2. Servlet容器的類路徑中。
當預設的配置不符合要求時,才需要配置guacamole.properties檔案,或者為擴充套件提供額外的配置資訊。下面是一些標準的配置屬性:
**api-session-timeout** 複製程式碼
時間是以分鐘為單位,允許Guacamole回話(驗證令牌)在使用者無活動時保持有效。如果忽略設定,Guacamole回話就會在無活動後60分鐘到期。
**available-languages** 複製程式碼
用英文逗號把語言關鍵字白名單隔開,這是允許在Guacamole介面中使用的語言。例如:限制Guacamole只能用英語和法語:
  available-languages: en,de 複製程式碼
當找不到對應語言的翻譯檔案時,英語將作為備用語言。僅僅當你完全確定不會缺失字元時,才可以在配置列表裡取消英語。
**guacd-host** 複製程式碼
Guacamole代理守護程式預設監聽的主機。如果忽略設定,Guacamole將預設監聽localhost。
**guacd-port** 複製程式碼
Guacamole代理守護程式預設監聽的埠。如果忽略設定,Guacamole將預設監聽4822埠。
**guacd-ssl** 複製程式碼
如果設定為“true”,Guacamole將在web應用程式和guacd間用SSL/TLS加密。預設情況下,web應用程式和guacd之間的連線不加密。
注意,如果你啟用了這個選項,你必須用命令列選項配置guacd使用SSL。這些選項的檔案在guacd的手冊中。你需要一個SSL證書和私鑰。
Example 5.1. Example
**guacamole.properties**
# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port: 4822
3.3 Web應用日誌
預設情況下,Guacamole將會記錄所有控制檯日誌。比如Tomcat等Servlet容器會自動重定向這些訊息到一個日誌檔案中,使用Tomcat時為catalina.out,在Guacamole執行時該檔案只讀。日誌訊息分為四個不同的等級,根據訊息的重要性和嚴重性分為:
error
複製程式碼
致命的錯誤。被日誌描述的操作不能繼續執行,該錯誤是個嚴重需要去解決的問題。
warn
複製程式碼
警告通常不是致命的。操作能繼續執行,但是個值得注意的問題。
info
複製程式碼
普通的資訊。這些也許有用,或只是為了引起管理員的注意,但對Guacamole伺服器來說,通常不是重要的操作。
debug
複製程式碼
面向開發的詳細除錯資訊。幾乎所有的除錯資訊都包含堆疊追蹤和內部資訊,這些資訊在程式碼中調查問題時非常有用。這些預期的除錯資訊雖然冗長,但不會影響效能。
trace
複製程式碼
追蹤資訊和除錯資訊類似的故意冗長,但是如此低階別且頻繁的資訊會影響效能。追蹤級別的資訊很少的情況下才有設定的必要,主要是在調查問題時提供非常詳細的資訊。
Guacamole日誌訊息使用一個
四 guacd配置
可以在系統的/etc/guacd.conf中編寫配置內容
[daemon]
pid_file = /var/run/guacd.pid
log_level = info
[server]
bind_host = localhost
bind_port = 4822
#
# The following parameters are valid only if
# guacd was built with SSL support.
#
[ssl]
server_certificate = /etc/ssl/certs/guacd.crt
server_key = /etc/ssl/private/guacd.key
複製程式碼
配置引數
Section | Name | Description |
---|---|---|
daemon | pid_file | The name of the file in which the PID of the main guacd process should be written. This is mainly needed for startup scripts,which need to monitor the state of guacd,killing it if necessary. If this parameter is specified,the user running guacd must have sufficient permissions to create or modify the specified file,or startup will fail. |
daemon | log_level | The maximum level at which guacd will log messages to syslog and,if running in the foreground,the console. If omitted,the default level of info will be used.Legal values are trace,debug,info,warning,and error. |
server | bind_host | The host that guacd should bind to when listening for connections. If unspecified,guacd will bind to localhost,and only connections from within the server hosting guacd will succeed. |
server | bind_port | The port that guacd should bind to when listening for connections. If unspecified,port 4822 will be used. |
ssl | server_certificate | The filename of the certificate to use for SSL encryption of the Guacamole protocol. If this option is specified,SSL encryption will be enabled,and the Guacamole web application will need to be configured within guacamole.properties to use SSL as well. |
ssl | server_key | The filename of the private key to use for SSL encryption of the Guacamole protocol. If this option is specified,and the Guacamole web application will need to be configured within guacamole.properties to use SSL as well. |
五 使用guacd
鱷梨醬可從Web瀏覽器中訪問桌面的許多功能。儘管大多數人僅在絕對必要時才使用遠端桌面工具,但我們認為鱷梨醬必須以成為訪問桌面的主要手段為目標,因此該介面應儘可能地無縫且不顯眼。
5.1 Home screen
成功登入後,您將被帶到列出所有可用連線的Guacamole主螢幕,或者如果您只能訪問一個連線,則直接進入該連線。主螢幕將包含您有權訪問的所有連線的列表,以及任何最近使用或活動的連線的縮圖。如果您可以訪問大量連線並且希望快速找到特定的連線,則還可以在“過濾器”欄位中輸入搜尋字詞,以按名稱過濾連線列表
5.2 Client screen
開啟連線後,您將看到遠端顯示器的實時檢視。您可以像使用普通桌上型電腦一樣與此顯示互動。滑鼠和鍵盤的功能就像直接連線到遠端計算機一樣。