日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

guacamole 源码_Guacamole学习笔记

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 guacamole 源码_Guacamole学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1: 介紹:

Guacamole可以同HTML5來代理遠程桌面協議(如: VNC, RDP, Telnet, SSH)

官網: http://guac-dev.org/

2: 架構:

架構圖:

image.png

架構解釋:

用戶通過瀏覽器連接到Guacamole的服務端, Guacamole通過JS寫的客戶端是為用戶提供服務, 服務端和客戶端的通信是基于HTTP的私有協議; web應用就是將瀏覽器客戶端的內容接受處理并轉發guacd, 就是一個本地代理, Guacamole的協議和提供給guacd的協議是無關的, Guacamole的客戶端和web應用不需要知道具體運行的什么協議.

2.1關于Guacamole協議:

web應用完全不需要理解遠程桌面協議, 但必須要理解Guacamole的協議(遠程顯示渲染和事件傳輸),

而作為一個遠程顯示和交互協議, Guacamole是現有遠程連接協議的集合. 想讓Guacamole支持一個新的協議 只需要下一個"翻譯"協議的中間層即可. 這個中間件就是guacd

2.2關于guacd

guacd是Guacamole動態支持多種遠程桌面協議(這里統稱為客戶端插件)和基于web連接遠程桌面協議的核心.

guacd是一個安裝在Guacamole上后臺運行的守護進程, 等待來自web的連接. guacd也不需要理解特定的遠程桌面協議, 一旦客戶端插件開始啟動, 他和guacd獨立運行, 并且擁有和web應用完全的同學權限.

2.3關于web應用

web應用是直接和用戶交付的組件.web應用不理解遠程桌面協議, 但依賴guacd; web應用的唯一左右就是提供一個漂亮的web界面和認證.

我們目前用java來寫的web應用, 但他可以基于任何語言重寫; Guacamole的重點在于API.

2.4關于RealMint

Guacamole現在是一個通用的遠程桌面網關, 但并不絕對. Guacamole開始于一個純凈的基于文本的JS寫的名字叫做ReaMint的telnet客戶端, 這個主意起源于演示, 之所以出名主要是由于他是純JS寫的.

RealMint的隧道主要是用PHP寫的, 相對于Guacamole的HTTP的隧道, RealMint的隧道只是簡單的長輪詢, 并且效率低下. 但是RealMint的鍵盤部分實現的很好, 目前吸收到了Guacamole中, 但也僅此而已了.

2.5關于VNC客戶端

一旦開發者掌握了HTML5的canvas標簽, 并且看到他已經被Firefox和Chrome支持了, 就有人想做個JS的的VNC客戶端的POC.

這個客戶端是純JS實現的,客戶端用的JAVA, 通過將VNC翻譯為XML版的. 該客戶端的開發是基于VNC本身功能驅動的, 開發范圍限制于將一個單獨的連接轉發給一組用戶. 雖然看法速度不是很快,但是足夠POC和項目需求了. 在SourceForge上通過Guacamole可以找到

2.6 關于遠程桌面網關

開發一個基于文本協議的快速協議即可代表多個遠程管理協議. 整個系統以后臺運行形式重新構建了, 項目的范圍擴展到相對于一個快速的HTML5的遠程桌面協議功能足夠的VNC客戶端和通用API. 現在Guacamole可以用作一個中心網關來連接多個運行不同協議的桌面. 同時也提供可擴展的認證, 當然這里就需要可以通過HTML5訪問的一個通用API.

3: 安裝:

Guacamole有2個部分:

Guacamole-server: 提供代理和相關依賴庫

guacamole-client: 提供服務端容器(如Tomcat)運行的客戶端

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

以下以CentOS為例介紹按照過程:

3.1 服務端安裝:

必選依賴:

yum install libjpeg-turbo-devel cairo-devel libjpeg-devel libpng-devel uuid-devel autoconf automake libtool xmvn

可選依賴:

不同的遠程連接協議需要的依賴也不一樣:

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監聽地址:

在開啟IPV6的情況下, tomcat默認只會監聽IPV6, 需要手工調整下tomcat的配置/etc/tomcat/server.xml

connectionTimeout="20000"

URIEncoding="UTF-8"

redirectPort="8443" />

制定監聽地址: address="192.168.10.11" #192.168.10.11為本機IP地址

啟動服務:

# 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

雖然現在服務都已經啟動, 單身現在的Guacamole并不是完全可用的狀態

4 Guacamole配置

Guacamole默認從user-mapping.xml讀取所有的用戶和連接.

目的如下:

最小化部署方便

驗證方便

不論認證方式如何, Guacamole的配置主要有2部分組成:

1: 變量GUACAMOLE_HOME所指向的目錄: 默認主要從這里尋找配置文件

2: gugcamole.properties: GUacamole和擴展所的主要配置文件

4.1 GUACAMOLE_HOME

Guacamole默認從以以下順序, 從配置目錄中讀取配置文件:

1: 系統的guacamole.home屬性

2: 系統的GUACAMOLE_HOME變量

3: 運行程序用戶的.guacamole目錄

Guacamole從$GUACAMOLE_HOME目錄中尋找guacamole.properties文件

4.2 guacamole.properties

$GUACAMOLE_HOME目錄中包含如下文件:

guacamole.properties:

決定Guacamole如何連接到guacd, 也可以定義插件

api-session-timeout:

單位: 分鐘

默認: 60

Guacamole會話的空連接時間

guacd-host:

Guacamole代理的監聽地址, 默認localhost

guacd-port:

Guacamole代理的監聽端口, 默認4822

guacd-ssl:

Web應用和guacd之間是否使用SSL/TLS, 默認false

logback.xml:

Guacamole使用Logabck來記錄日志, 默認記錄到console, 也可以指定自己的Logback配置文件

服務代理程序默認會記錄日志.

extensions/:

存放Guacamole的插件, 啟動時默認會加載所有已.jar結尾的文件

lib/

Guacamole會在這里尋找插件所需要的依賴, 改目錄下的.jar文件對所有插件可讀

4.3 使用默認認證

默認認證的優先級最低,

配置文件優先級:

1: guacamole.properties:

user-mapping: /path/to/user-mapping.xml

2: GUACAMOLE_HOME/user-mapping.xml

內容類似如下:

vnc

localhost

5900

VNCPASS

username="USERNAME2"

password="319f4d26e3c536b5dd871bb2c52e3178"

encoding="md5">

vnc

localhost

5901

VNCPASS

vnc

otherhost

5900

VNCPASS

每一個 就是一個獨立的用戶

可以通過對特定的主機和協議授權, 默認只能使用DEFAULT的connection

4.3.1協議配置

* vnc:

* hostname: VNC服務器的主機名

* port: vnc端口

* autoretry: 重試次數

* password: vnc密碼

* color-depth: 必須是2的次方數

* read-only: 是否只讀

* clipboard-encoding: 剪切板編碼 ISO8859-1/UTF-8/UTF-16/CP1252

vnc也可以做到支持文件傳輸和音頻傳輸, 具體可以參考: http://guac-dev.org/doc/gug/configuring-guacamole.html

RDP/PDU相關參數參考: http://guac-dev.org/doc/gug/configuring-guacamole.html

添加用戶不需要重啟服務. 該文件的修改會立即生效.

4.4認證配置:

以下使用mysql作為認證后端, 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 可以從編譯目錄下查找

創建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)

數據庫創建完畢后就需要對數據庫針對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

注意: 如果版本升級了 還需要執行upgrade目錄下的sql

如: mysql guacamole_db < schema/upgrade/upgrade-pre-0.9.6.sql

確認執行成功:

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)

關于各個表的具體解釋參加: 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

默認會有一個賬號為: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

通過上面, 我們服務安裝好了, 也知道配置文件的目錄和意義了, 也知道如何使用數據庫作為后端認證和存儲了; 下面就開始使用Guacamole.

5.1 配置Guacamole

雖然Guacamole文檔上說可以直接通過環境變量引用來獲取配置文件, 但我這里并沒有成功, 最終還是通過在tomcat目錄下軟連接才通過, 不過依然設置相應的環境變量:

我們將Guacamole的配置目錄設置為/etc/guacamole

1: 將如下內容添加到~/.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服務器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

通過默認的賬號密碼 即可登錄,

在數據庫中添加鏈接, 既可以在web中使用.

image.png

總結

以上是生活随笔為你收集整理的guacamole 源码_Guacamole学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。