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 + 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章