Guacamole搭建
前言:
因項目需要,經歷多天查閱各種文檔,幾經波折終于功德圓滿,寫下此篇文章供大家分享。Guacamole就個人理解而言是一個可以通過web瀏覽器訪問遠程服務器終端進行操作的可視化工具。主要由web(瀏覽器)、Guacamole Server(核心)、Remote Desktops(遠程桌面)三大模塊組成。
簡介:
Guacamole不是一個獨立的Web應用程序,由許多部分組成。Web應用程序實際上旨在簡單且最小化,大多數gruntwork由較低級別的組件執行。
用戶使用其Web瀏覽器連接到Guacamole服務器。用JavaScript編寫的Guacamole客戶端由Guacamole服務器內的Web服務器提供給用戶。加載后,此客戶端使用Guacamole協議通過HTTP連接回服務器。
部署到Guacamole服務器的Web應用程序讀取Guacamole協議并將其轉發給guacd(本機Guacamole代理)。該代理實際上解釋了Guacamole協議的內容,代表用戶連接到任意數量的遠程桌面服務器。
Guacamole協議與guacd結合提供了協議不可知性:Guacamole客戶端和Web應用程序都不需要知道實際使用的遠程桌面協議。
Guacamole協議
Web應用程序根本不了解任何遠程桌面協議。它不包含對VNC或RDP或Guacamole堆棧支持的任何其他協議的支持。它實際上只了解Guacamole協議,這是一種用于遠程顯示渲染和事件傳輸的協議。雖然具有這些屬性的協議自然具有與遠程桌面協議相同的能力,但遠程桌面協議和Guacamole協議背后的設計原則是不同的:Guacamole協議不旨在實現特定桌面環境的功能。
作為遠程顯示和交互協議,Guacamole實現了現有遠程桌面協議的超集。因此,向Guacamole添加對特定遠程桌面協議(如RDP)的支持涉及編寫在遠程桌面協議和Guacamole協議之間"翻譯"的中間層。實現這樣的轉換與實現任何本機客戶端沒有什么不同,除了這個特定的實現呈現為遠程顯示而不是本地客戶端。
處理此轉換的中間層是guacd。
guacd
guacd是Guacamole的核心,它動態加載對遠程桌面協議(稱為"客戶端插件")的支持,并根據從Web應用程序收到的指令將它們連接到遠程桌面。
guacd是一個守護程序進程,它與Guacamole一起安裝并在后臺運行,偵聽來自Web應用程序的TCP連接。guacd也不了解任何特定的遠程桌面協議,而是實現了足夠的Guacamole協議來確定需要加載哪些協議支持以及必須將哪些參數傳遞給它。加載客戶端插件后,它將獨立于guacd運行,并完全控制自身與Web應用程序之間的通信,直到客戶端插件終止。
guacd和所有客戶端插件依賴于一個公共庫libguac,它使通過Guacamole協議的通信更容易,更抽象。
Web應用程序
用戶實際與之交互的Guacamole部分是Web應用程序。
如前所述,Web應用程序不實現任何遠程桌面協議。它依賴于guacd,并且只實現一個漂亮的Web界面和身份驗證層。
我們選擇用Java實現Web應用程序的服務器端,但是沒有理由不能用不同的語言編寫它。事實上,因為Guacamole是一個API,我們鼓勵這樣做。
RealMint
Guacamole現在是一個通用的遠程桌面網關,但情況并非總是如此。Guacamole 最初是一個用JavaScript編寫的純文本Telnet客戶端,名為 RealMint("RealMint"是"終端"的字謎)。它主要是作為一個演示而寫的,雖然它的目的是有用,但它的主要聲譽只是它是純粹的JavaScript。
RealMint使用的隧道是用PHP編寫的。與Guacamole的HTTP隧道相比,RealMint的隧道僅使用簡單的長輪詢并且效率低下。RealMint有一個不錯的鍵盤實現,它現在存在于Guacamole鍵盤代碼的部分內容中,但這實際上是RealMint功能和可用性的范圍。
鑒于它只是遺留協議的一個實現,并且存在其他幾個JavaScript終端仿真器,其中大多數已經完善且穩定,該項目被刪除。
VNC客戶端
一旦開發人員了解了HTML5 canvas標簽,并發現它已經在Firefox和Chrome中實現,那么工作就開始于概念驗證JavaScript VNC客戶端了。
該客戶端純粹是帶有Java服務器組件的JavaScript,并通過將VNC轉換為基于XML的版本來工作。它的開發自然是由VNC的功能驅動的,其范圍僅限于將單個連接轉發給一組用戶。雖然相對較慢,但概念驗證工作得很好,項目需要一個在線居住的地方,并在SourceForge注冊為"Guacamole" - 一個HTML5 VNC客戶端。
隨著Guacamole的發展并不僅僅是概念驗證,對速度的需求也在增加,舊的RealMint風格的長輪詢被刪除了,就像使用XML一樣。
由于當時無法信任WebSocket,并且Java沒有針對servlet的WebSocket標準,因此開發了一個等效的基于HTTP的隧道。如果WebSocket因任何原因無法使用,今天仍會使用此隧道。
遠程桌面網關
開發了一種更快的基于文本的協議,它可以呈現多個遠程桌面協議的功能,而不僅僅是VNC。整個系統被重新架構為一個標準守護進程,guacd和一個公共庫libguac,它驅動了守護進程和協議支持,后者變得可擴展。
該項目的范圍從適當的VNC客戶端擴展到高性能的HTML5遠程桌面網關和通用API。在當前狀態下,Guacamole可用作訪問運行不同遠程桌面服務器的任意數量計算機的中央網關。它提供可擴展的身份驗證,如果您需要更專業的內容,則可以使用基于HTML5的遠程訪問的通用API。
部署:
系統環境:
CentOS7 + Tomcat8 + JDK1.8 + guacamole-server0.9.14
安裝JDK:
執行命令:
yum install -y java-1.8.0-openjdk-devel.x86\_64查看是否安裝成功:
java -version安裝Tomcat:
下載 :https://tomcat.apache.org/download-80.cgi#8.0.53
解壓:
tar -xzvf apache-tomcat-8.0.53.tar.gz配置tomcat以service方式啟動:
cd /etc/init.d/vi tomcattomcat文本內容:
#!/bin/bash # description: Tomcat Start Stop Restart # processname: tomcat8 # chkconfig: 234 20 80 JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64 export JAVA_HOME PATH=$JAVA_HOME/bin:$PATH export PATH CATALINA_HOME=/usr/local/tomcat/apache-tomcat-8.0.53case $1 in start) sh $CATALINA_HOME/bin/startup.sh ;; stop) sh $CATALINA_HOME/bin/shutdown.sh ;; restart) sh $CATALINA_HOME/bin/shutdown.sh sh $CATALINA_HOME/bin/startup.sh ;; esac exit 0配置完成后可通過service tomcat start 命令啟動
訪問: http://localhost:8080/
安裝Guacamole-Server
安裝環境:
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.rorpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86\_64/nux-dextop-release-0-1.el7.nux.noarch.rpmyum update -y安裝依賴:
yum -y install cairo-devel libjpeg-devel libpng-devel uuid-devel yum -y install ffmpeg-devel freerdp-devel pango-devel libssh2-devel yum -y install libtelnet-devel libvncserver-devel pulseaudio-libs-devel yum -y install openssl-devel libvorbis-devel libwebp-devel yum -y install freerdp-plugins安裝包下載:https://guacamole.apache.org/releases/0.9.14/
解壓并安裝:
tar -xzvf guacamole-server-0.9.14.tar.gzcd /guacamole-server-0.9.14/./configure --with-init-dir=/etc/init.d make && make install啟動服務:
service guacd start安裝Guacamole-client
- 將之前下載的guacamole.war包復制在tomcat的webapps下。
重新啟動tomcat:
service tomcat start配置:
創建/etc/guacamole/文件目錄:
mkdir /etc/guacamole/創建guacamole.properties文件:
cd /etc/guacamole/vi guacamole.propertiesguacamole.properties文本內容:
# Hostname and port of guacamole proxyguacd-hostname: localhostguacd-port: 4822enable-websocket: trueenable-clipboard-integration: true# auth-provider: net.sourceforge.guacamole.net.auth.noauth.NoAuthenticationProvider# noauth-config: /etc/guacamole/noauth-config.xmlauth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProviderbasic-user-mapping: /etc/guacamole/user-mapping.xml在/etc/guacamole/目錄下創建user-mapping.xml文件:
vi user-mapping.xmluser-mapping.xml文本內容:
<user-mapping><authorize password="123456" username="admin"><connection name="rdp-windows-zongmin"><protocol>rdp</protocol><param name="hostname">119.XXXX.121.XXXX</param><param name="port">3389</param><param name="username">XXXX</param><param name="password">XXXXXX</param></connection><connection name="rdp-192.XXXX.41.XXXX"><protocol>rdp</protocol><param name="hostname">192.XXXX.41.XXXX</param><param name="port">3389</param><param name="username">XXXXX</param><param name="password">XXXXX</param></connection><connection name="ssh-192.XXXX.41.XXXX"><protocol>ssh</protocol><param name="hostname">192.XXXX.41.XXXX</param><param name="port">22</param><param name="username">XXXXX</param><param name="password">XXXXX</param><param name="enable-sftp">true</param><param name="sftp-hostname">192.XXXX.41.XXXX</param><param name="sftp-root-directory">/data/sftp</param><param name="sftp-username">XXXXX</param><param name="sftp-password">XXXXX</param></connection><connection name="ssh-192.XXXX.41.XXXX"><protocol>ssh</protocol><param name="hostname">192.XXXX.41.XXXX</param><param name="port">22</param><param name="username">XXXXX</param><param name="password">XXXXX</param><param name="enable-sftp">true</param><param name="sftp-hostname">192.XXXX.41.XXXX</param><param name="sftp-root-directory">/data/sftp</param><param name="sftp-username">XXXXX</param><param name="sftp-password">XXXXX</param></connection></authorize> </user-mapping>重新啟動服務: service guacd restart
訪問: http://localhost:8080/guacamole/#/
登錄輸入:賬號admin密碼123456
總結
以上是生活随笔為你收集整理的Guacamole搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android常用控件-02
- 下一篇: mysql进行查询时忽略时分秒