Guacamole學(xué)習(xí)筆記

官網(wǎng): http://guac-dev.org/

1: 介紹:

Guacamole可以同HTML5來代理遠(yuǎn)程桌面協(xié)議(如: VNC, RDP, Telnet, SSH)
    官網(wǎng): http://guac-dev.org/

2: 架構(gòu):

架構(gòu)圖:

image.png

架構(gòu)解釋:

用戶通過瀏覽器連接到Guacamole的服務(wù)端, Guacamole通過JS寫的客戶端是為用戶提供服務(wù), 服務(wù)端和客戶端的通信是基于HTTP的私有協(xié)議; web應(yīng)用就是將瀏覽器客戶端的內(nèi)容接受處理并轉(zhuǎn)發(fā)guacd, 就是一個本地代理, Guacamole的協(xié)議和提供給guacd的協(xié)議是無關(guān)的, Guacamole的客戶端和web應(yīng)用不需要知道具體運行的什么協(xié)議.
2.1關(guān)于Guacamole協(xié)議:
web應(yīng)用完全不需要理解遠(yuǎn)程桌面協(xié)議, 但必須要理解Guacamole的協(xié)議(遠(yuǎn)程顯示渲染和事件傳輸), 
而作為一個遠(yuǎn)程顯示和交互協(xié)議, Guacamole是現(xiàn)有遠(yuǎn)程連接協(xié)議的集合. 想讓Guacamole支持一個新的協(xié)議 只需要下一個"翻譯"協(xié)議的中間層即可. 這個中間件就是guacd
2.2關(guān)于guacd
guacd是Guacamole動態(tài)支持多種遠(yuǎn)程桌面協(xié)議(這里統(tǒng)稱為客戶端插件)和基于web連接遠(yuǎn)程桌面協(xié)議的核心.
guacd是一個安裝在Guacamole上后臺運行的守護(hù)進(jìn)程, 等待來自web的連接. guacd也不需要理解特定的遠(yuǎn)程桌面協(xié)議, 一旦客戶端插件開始啟動, 他和guacd獨立運行, 并且擁有和web應(yīng)用完全的同學(xué)權(quán)限.
2.3關(guān)于web應(yīng)用
web應(yīng)用是直接和用戶交付的組件.web應(yīng)用不理解遠(yuǎn)程桌面協(xié)議, 但依賴guacd; web應(yīng)用的唯一左右就是提供一個漂亮的web界面和認(rèn)證.
我們目前用java來寫的web應(yīng)用, 但他可以基于任何語言重寫; Guacamole的重點在于API.
2.4關(guān)于RealMint
Guacamole現(xiàn)在是一個通用的遠(yuǎn)程桌面網(wǎng)關(guān), 但并不絕對. Guacamole開始于一個純凈的基于文本的JS寫的名字叫做ReaMint的telnet客戶端, 這個主意起源于演示, 之所以出名主要是由于他是純JS寫的.

RealMint的隧道主要是用PHP寫的, 相對于Guacamole的HTTP的隧道, RealMint的隧道只是簡單的長輪詢, 并且效率低下. 但是RealMint的鍵盤部分實現(xiàn)的很好, 目前吸收到了Guacamole中, 但也僅此而已了.
2.5關(guān)于VNC客戶端
一旦開發(fā)者掌握了HTML5的canvas標(biāo)簽, 并且看到他已經(jīng)被Firefox和Chrome支持了, 就有人想做個JS的的VNC客戶端的POC.

這個客戶端是純JS實現(xiàn)的,客戶端用的JAVA, 通過將VNC翻譯為XML版的. 該客戶端的開發(fā)是基于VNC本身功能驅(qū)動的, 開發(fā)范圍限制于將一個單獨的連接轉(zhuǎn)發(fā)給一組用戶. 雖然看法速度不是很快,但是足夠POC和項目需求了. 在SourceForge上通過Guacamole可以找到
2.6 關(guān)于遠(yuǎn)程桌面網(wǎng)關(guān)
開發(fā)一個基于文本協(xié)議的快速協(xié)議即可代表多個遠(yuǎn)程管理協(xié)議. 整個系統(tǒng)以后臺運行形式重新構(gòu)建了, 項目的范圍擴展到相對于一個快速的HTML5的遠(yuǎn)程桌面協(xié)議功能足夠的VNC客戶端和通用API. 現(xiàn)在Guacamole可以用作一個中心網(wǎng)關(guān)來連接多個運行不同協(xié)議的桌面. 同時也提供可擴展的認(rèn)證, 當(dāng)然這里就需要可以通過HTML5訪問的一個通用API.

3: 安裝:

Guacamole有2個部分: 
Guacamole-server: 提供代理和相關(guān)依賴庫
guacamole-client: 提供服務(wù)端容器(如Tomcat)運行的客戶端

Guacamole-client可以直接使用二進(jìn)制程序, 但Guacamole-server就需要通過源碼按照了(不要灰心, 很簡單的, 并且編譯過程也是自動化的)

以下以CentOS為例介紹按照過程:
3.1 服務(wù)端安裝:
必選依賴:
yum install libjpeg-turbo-devel cairo-devel libjpeg-devel libpng-devel uuid-devel autoconf automake libtool xmvn

可選依賴:
    不同的遠(yuǎn)程連接協(xié)議需要的依賴也不一樣:
        VNC: libVNCServer, 
        RDP: FreeRDP - 1.0 or higher, 
        SSH: libssh2, Pango
        telnet: libtelnet,Pango

這里以vnc為例:
    yum install libvncserver-devel


安裝Guacamole-server:
     git clone https://github.com/glyptodon/guacamole-server.git
     cd guacamole-server/
     autoreconf -fi
     ./configure --with-init-dir=/etc/init.d
     make
     make install
     ldconfig
3.2 安裝客戶端
    yum install tomcat
    git clone git://github.com/glyptodon/guacamole-client.git
    cd guacamole-client
    mvn package
    cp guacamole/target/guacamole-0.9.9.war 
    

tomcat監(jiān)聽地址:
    在開啟IPV6的情況下, tomcat默認(rèn)只會監(jiān)聽IPV6, 需要手工調(diào)整下tomcat的配置/etc/tomcat/server.xml
    <Connector port="8080" address="192.168.10.11"  protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           redirectPort="8443" />
  制定監(jiān)聽地址: address="192.168.10.11" #192.168.10.11為本機IP地址

啟動服務(wù):
    # service tomcat restart
    Redirecting to /bin/systemctl restart  tomcat.service
    # service guacd restart
    Stopping guacd: SUCCESS (not running)
    Starting guacd: guacd[112397]: INFO:        Guacamole proxy daemon (guacd) version 0.9.9 started
    SUCCESS

雖然現(xiàn)在服務(wù)都已經(jīng)啟動,  單身現(xiàn)在的Guacamole并不是完全可用的狀態(tài)

4 Guacamole配置

Guacamole默認(rèn)從user-mapping.xml讀取所有的用戶和連接.
目的如下:
    最小化部署方便
    驗證方便

不論認(rèn)證方式如何, Guacamole的配置主要有2部分組成:
1: 變量GUACAMOLE_HOME所指向的目錄: 默認(rèn)主要從這里尋找配置文件
2: gugcamole.properties: GUacamole和擴展所的主要配置文件
4.1 GUACAMOLE_HOME
Guacamole默認(rèn)從以以下順序, 從配置目錄中讀取配置文件:
1: 系統(tǒng)的guacamole.home屬性
2: 系統(tǒng)的GUACAMOLE_HOME變量
3: 運行程序用戶的.guacamole目錄

Guacamole從$GUACAMOLE_HOME目錄中尋找guacamole.properties文件
4.2 guacamole.properties
$GUACAMOLE_HOME目錄中包含如下文件:
guacamole.properties:
    決定Guacamole如何連接到guacd, 也可以定義插件
    api-session-timeout: 
        單位: 分鐘
        默認(rèn): 60
        Guacamole會話的空連接時間
    
guacd-host:
    Guacamole代理的監(jiān)聽地址, 默認(rèn)localhost

guacd-port:
    Guacamole代理的監(jiān)聽端口, 默認(rèn)4822

guacd-ssl:
    Web應(yīng)用和guacd之間是否使用SSL/TLS, 默認(rèn)false
    
logback.xml:
    Guacamole使用Logabck來記錄日志, 默認(rèn)記錄到console, 也可以指定自己的Logback配置文件
    服務(wù)代理程序默認(rèn)會記錄日志.

extensions/:
    存放Guacamole的插件, 啟動時默認(rèn)會加載所有已.jar結(jié)尾的文件

lib/
    Guacamole會在這里尋找插件所需要的依賴, 改目錄下的.jar文件對所有插件可讀
4.3 使用默認(rèn)認(rèn)證
默認(rèn)認(rèn)證的優(yōu)先級最低, 
配置文件優(yōu)先級: 
    1: guacamole.properties: 
        user-mapping: /path/to/user-mapping.xml
    2: GUACAMOLE_HOME/user-mapping.xml

內(nèi)容類似如下:

<user-mapping>
<!-- Per-user authentication and config information -->
<authorize username="USERNAME" password="PASSWORD">
    <protocol>vnc</protocol>
    <param name="hostname">localhost</param>
    <param name="port">5900</param>
    <param name="password">VNCPASS</param>
</authorize>

<!-- Another user, but using md5 to hash the password
     (example below uses the md5 hash of "PASSWORD") -->
<authorize 
        username="USERNAME2"
        password="319f4d26e3c536b5dd871bb2c52e3178"
        encoding="md5">

    <!-- First authorized connection -->
    <connection name="localhost">
        <protocol>vnc</protocol>
        <param name="hostname">localhost</param>
        <param name="port">5901</param>
        <param name="password">VNCPASS</param>
    </connection>

    <!-- Second authorized connection -->
    <connection name="otherhost">
        <protocol>vnc</protocol>
        <param name="hostname">otherhost</param>
        <param name="port">5900</param>
        <param name="password">VNCPASS</param>
    </connection>
</authorize>
</user-mapping>

每一個<authorize></authorize> 就是一個獨立的用戶
可以通過<connection></connection>對特定的主機和協(xié)議授權(quán), 默認(rèn)只能使用DEFAULT的connection

4.3.1協(xié)議配置
* vnc:
    * hostname: VNC服務(wù)器的主機名
    * port: vnc端口
    * autoretry: 重試次數(shù)
    * password: vnc密碼
    * color-depth:  必須是2的次方數(shù)
    * read-only: 是否只讀
    * clipboard-encoding: 剪切板編碼 ISO8859-1/UTF-8/UTF-16/CP1252

    vnc也可以做到支持文件傳輸和音頻傳輸, 具體可以參考: http://guac-dev.org/doc/gug/configuring-guacamole.html
    RDP/PDU相關(guān)參數(shù)參考: http://guac-dev.org/doc/gug/configuring-guacamole.html

添加用戶不需要重啟服務(wù). 該文件的修改會立即生效.
4.4認(rèn)證配置:
以下使用mysql作為認(rèn)證后端, Guacamole使用mysql需要如下2個文件:
    # tree /etc/guacamole/
    /etc/guacamole/
    ├── extensions
    │   └── guacamole-auth-jdbc-mysql-0.9.8.jar
    └──  lib
        └── mysql-connector-java-5.1.37-bin.jar

    mysql的依賴可以通過http://dev.mysql.com/downloads/connector/j/ 下載
Guacamole-auth的jar 可以從編譯目錄下查找

創(chuàng)建mysql配置:
    MariaDB [(none)]> CREATE DATABASE guacamole_db;
    Query OK, 1 row affected (0.00 sec)
    MariaDB [(none)]> CREATE USER 'guacamole_user'@'localhost' IDENTIFIED BY 'guacd_password';
    Query OK, 0 rows affected (0.00 sec)
    MariaDB [(none)]> GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';
    Query OK, 0 rows affected (0.00 sec)
    MariaDB [(none)]> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.00 sec)

數(shù)據(jù)庫創(chuàng)建完畢后就需要對數(shù)據(jù)庫針對Guacamole做基本的配置, 這里可以直接加載sql,
    # locate 001-create-schema.sql | grep mysql
    /root/guacamole-client/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/schema/001-create-schema.sql
    # cd /root/guacamole-client/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/schema/
    # ls
    001-create-schema.sql  002-create-admin-user.sql  upgrade
    # cat *.sql | mysql  guacamole_db

注意: 如果版本升級了 還需要執(zhí)行upgrade目錄下的sql
    如: mysql guacamole_db < schema/upgrade/upgrade-pre-0.9.6.sql

確認(rèn)執(zhí)行成功:
    MariaDB [(none)]> use guacamole_db;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    Database changed
    MariaDB [guacamole_db]> show tables;l
    +---------------------------------------+
    | Tables_in_guacamole_db                |
    +---------------------------------------+
    | guacamole_connection                  |
    | guacamole_connection_group            |
    | guacamole_connection_group_permission |
    | guacamole_connection_history          |
    | guacamole_connection_parameter        |
    | guacamole_connection_permission       |
    | guacamole_system_permission           |
    | guacamole_user                        |
    | guacamole_user_permission             |
    +---------------------------------------+
    9 rows in set (0.00 sec)

    關(guān)于各個表的具體解釋參加: http://guac-dev.org/doc/gug/jdbc-auth.html

配置Guacamole使用mysql:
    cat /etc/guacamole/guacamole.properties  | grep mysql
    mysql-hostname: 192.168.10.11
    mysql-port: 3306
    mysql-database: guacamole_db
    mysql-username: guacamole_user
    mysql-password: guacd_password
    mysql-default-max-connections-per-user: 0
    mysql-default-max-group-connections-per-user: 0

默認(rèn)會有一個賬號為:guacadmin, 密碼也為:guacadmin的用戶存在

手工添加用戶:
    SET @salt = UNHEX(SHA2(UUID(), 256));

    INSERT INTO guacamole_user (username, password_salt, password_hash) VALUES ('myuser', @salt, UNHEX(SHA2(CONCAT('mypassword', HEX(@salt)), 256)));

手工添加鏈接:
    INSERT INTO guacamole_connection (connection_name, protocol) VALUES ('test', 'vnc');
    SELECT * FROM guacamole_connection WHERE connection_name = 'test' AND parent_id IS NULL;
    INSERT INTO guacamole_connection_parameter VALUES (1, 'hostname', 'localhost');

5: 使用Guacamole

通過上面, 我們服務(wù)安裝好了, 也知道配置文件的目錄和意義了, 也知道如何使用數(shù)據(jù)庫作為后端認(rèn)證和存儲了; 下面就開始使用Guacamole.
5.1 配置Guacamole
雖然Guacamole文檔上說可以直接通過環(huán)境變量引用來獲取配置文件, 但我這里并沒有成功, 最終還是通過在tomcat目錄下軟連接才通過, 不過依然設(shè)置相應(yīng)的環(huán)境變量:
我們將Guacamole的配置目錄設(shè)置為/etc/guacamole
    1: 將如下內(nèi)容添加到~/.bashrc 或者 /etc/profile中 
        GUACAMOLE_HOME=/etc/guacamole
        export GUACAMOLE_HOME
    2: 軟連接
        ln -s  /etc/guacamole /usr/share/tomcat/.guacamole
    
最終目錄如下:
    # tree /etc/guacamole/
    /etc/guacamole/
    ├── extensions
    │   └── guacamole-auth-jdbc-mysql-0.9.9.jar
    ├── guacamole.properties
    └── lib
        └── mysql-connector-java-5.1.37-bin.jar

 重啟tomcat,
 通過瀏覽器連接到 http://$IP:8080/$guacamole_dir
    $IP: 為Guacamole服務(wù)器IP
    $guacamole_dir: 為Guacamole的web目錄
        # ls /var/lib/tomcat/webapps/
        guacamole-0.9.9  guacamole-0.9.9.war
        如上: $guacamole_dir 為 guacamole-0.9.9
    
 即可看到Guacamole的web界面如下圖:
image.png
通過默認(rèn)的賬號密碼 即可登錄, 
在數(shù)據(jù)庫中添加鏈接, 既可以在web中使用.
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容