前言:
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 + JDK18 + 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 tomcat
tomcat文本內容:
#!/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.53
case $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.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86\_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
yum 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.gz
cd /guacamole-server-0.9.14/
./configure --with-init-dir=/etc/init.d
make && make install
啓動服務:
service guacd start
安裝Guacamole-client
將之前下載的guacamole.war包複製在tomcat的webapps下。
mv ./guacamole.war /usr/local/tomcat/apache-tomcat-8.0.53/webapps
重新啓動tomcat:
service tomcat start
配置:
創建/etc/guacamole/文件目錄:
mkdir /etc/guacamole/
創建guacamole.properties文件:
cd /etc/guacamole/
vi guacamole.properties
guacamole.properties文本內容:
# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port: 4822
enable-websocket: true
enable-clipboard-integration: true
# auth-provider: net.sourceforge.guacamole.net.auth.noauth.NoAuthenticationProvider
# noauth-config: /etc/guacamole/noauth-config.xml
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
basic-user-mapping: /etc/guacamole/user-mapping.xml
在/etc/guacamole/目錄下創建user-mapping.xml文件:
vi user-mapping.xml
user-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
PLUS:
————————————————
版權聲明:本文爲CSDN博主「@桌上的陽光」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Yg854879464/article/details/82151314