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應用不理解遠程桌面協議, 但依賴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
配置參數
五 使用guacd
鱷梨醬可從Web瀏覽器中訪問桌面的許多功能。盡管大多數人僅在絕對必要時才使用遠程桌面工具,但我們認為鱷梨醬必須以成為訪問桌面的主要手段為目標,因此該界面應盡可能地無縫且不顯眼。
5.1 Home screen
成功登錄后,您將被帶到列出所有可用連接的Guacamole主屏幕,或者如果您只能訪問一個連接,則直接進入該連接。主屏幕將包含您有權訪問的所有連接的列表,以及任何最近使用或活動的連接的縮略圖。如果您可以訪問大量連接并且希望快速找到特定的連接,則還可以在“過濾器”字段中輸入搜索字詞,以按名稱過濾連接列表
5.2 Client screen
打開連接后,您將看到遠程顯示器的實時視圖。您可以像使用普通臺式機一樣與此顯示交互。鼠標和鍵盤的功能就像直接連接到遠程計算機一樣。
參考鏈接
http://guacamole.apache.org/doc/gug/installing-guacamole.html
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。