guacamole 源码_Guacamole学习笔记
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, 就是一個(gè)本地代理, Guacamole的協(xié)議和提供給guacd的協(xié)議是無關(guān)的, Guacamole的客戶端和web應(yīng)用不需要知道具體運(yùn)行的什么協(xié)議.
2.1關(guān)于Guacamole協(xié)議:
web應(yīng)用完全不需要理解遠(yuǎn)程桌面協(xié)議, 但必須要理解Guacamole的協(xié)議(遠(yuǎn)程顯示渲染和事件傳輸),
而作為一個(gè)遠(yuǎn)程顯示和交互協(xié)議, Guacamole是現(xiàn)有遠(yuǎn)程連接協(xié)議的集合. 想讓Guacamole支持一個(gè)新的協(xié)議 只需要下一個(gè)"翻譯"協(xié)議的中間層即可. 這個(gè)中間件就是guacd
2.2關(guān)于guacd
guacd是Guacamole動(dòng)態(tài)支持多種遠(yuǎn)程桌面協(xié)議(這里統(tǒng)稱為客戶端插件)和基于web連接遠(yuǎn)程桌面協(xié)議的核心.
guacd是一個(gè)安裝在Guacamole上后臺(tái)運(yùn)行的守護(hù)進(jìn)程, 等待來自web的連接. guacd也不需要理解特定的遠(yuǎn)程桌面協(xié)議, 一旦客戶端插件開始啟動(dòng), 他和guacd獨(dú)立運(yùn)行, 并且擁有和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)用的唯一左右就是提供一個(gè)漂亮的web界面和認(rèn)證.
我們目前用java來寫的web應(yīng)用, 但他可以基于任何語言重寫; Guacamole的重點(diǎn)在于API.
2.4關(guān)于RealMint
Guacamole現(xiàn)在是一個(gè)通用的遠(yuǎn)程桌面網(wǎng)關(guān), 但并不絕對(duì). Guacamole開始于一個(gè)純凈的基于文本的JS寫的名字叫做ReaMint的telnet客戶端, 這個(gè)主意起源于演示, 之所以出名主要是由于他是純JS寫的.
RealMint的隧道主要是用PHP寫的, 相對(duì)于Guacamole的HTTP的隧道, RealMint的隧道只是簡單的長輪詢, 并且效率低下. 但是RealMint的鍵盤部分實(shí)現(xiàn)的很好, 目前吸收到了Guacamole中, 但也僅此而已了.
2.5關(guān)于VNC客戶端
一旦開發(fā)者掌握了HTML5的canvas標(biāo)簽, 并且看到他已經(jīng)被Firefox和Chrome支持了, 就有人想做個(gè)JS的的VNC客戶端的POC.
這個(gè)客戶端是純JS實(shí)現(xiàn)的,客戶端用的JAVA, 通過將VNC翻譯為XML版的. 該客戶端的開發(fā)是基于VNC本身功能驅(qū)動(dòng)的, 開發(fā)范圍限制于將一個(gè)單獨(dú)的連接轉(zhuǎn)發(fā)給一組用戶. 雖然看法速度不是很快,但是足夠POC和項(xiàng)目需求了. 在SourceForge上通過Guacamole可以找到
2.6 關(guān)于遠(yuǎn)程桌面網(wǎng)關(guān)
開發(fā)一個(gè)基于文本協(xié)議的快速協(xié)議即可代表多個(gè)遠(yuǎn)程管理協(xié)議. 整個(gè)系統(tǒng)以后臺(tái)運(yùn)行形式重新構(gòu)建了, 項(xiàng)目的范圍擴(kuò)展到相對(duì)于一個(gè)快速的HTML5的遠(yuǎn)程桌面協(xié)議功能足夠的VNC客戶端和通用API. 現(xiàn)在Guacamole可以用作一個(gè)中心網(wǎng)關(guān)來連接多個(gè)運(yùn)行不同協(xié)議的桌面. 同時(shí)也提供可擴(kuò)展的認(rèn)證, 當(dāng)然這里就需要可以通過HTML5訪問的一個(gè)通用API.
3: 安裝:
Guacamole有2個(gè)部分:
Guacamole-server: 提供代理和相關(guān)依賴庫
guacamole-client: 提供服務(wù)端容器(如Tomcat)運(yùn)行的客戶端
Guacamole-client可以直接使用二進(jìn)制程序, 但Guacamole-server就需要通過源碼按照了(不要灰心, 很簡單的, 并且編譯過程也是自動(dòng)化的)
以下以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)只會(huì)監(jiān)聽IPV6, 需要手工調(diào)整下tomcat的配置/etc/tomcat/server.xml
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443" />
制定監(jiān)聽地址: address="192.168.10.11" #192.168.10.11為本機(jī)IP地址
啟動(dòng)服務(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)啟動(dòng), 單身現(xiàn)在的Guacamole并不是完全可用的狀態(tài)
4 Guacamole配置
Guacamole默認(rèn)從user-mapping.xml讀取所有的用戶和連接.
目的如下:
最小化部署方便
驗(yàn)證方便
不論認(rèn)證方式如何, Guacamole的配置主要有2部分組成:
1: 變量GUACAMOLE_HOME所指向的目錄: 默認(rèn)主要從這里尋找配置文件
2: gugcamole.properties: GUacamole和擴(kuò)展所的主要配置文件
4.1 GUACAMOLE_HOME
Guacamole默認(rèn)從以以下順序, 從配置目錄中讀取配置文件:
1: 系統(tǒng)的guacamole.home屬性
2: 系統(tǒng)的GUACAMOLE_HOME變量
3: 運(yùn)行程序用戶的.guacamole目錄
Guacamole從$GUACAMOLE_HOME目錄中尋找guacamole.properties文件
4.2 guacamole.properties
$GUACAMOLE_HOME目錄中包含如下文件:
guacamole.properties:
決定Guacamole如何連接到guacd, 也可以定義插件
api-session-timeout:
單位: 分鐘
默認(rèn): 60
Guacamole會(huì)話的空連接時(shí)間
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)會(huì)記錄日志.
extensions/:
存放Guacamole的插件, 啟動(dòng)時(shí)默認(rèn)會(huì)加載所有已.jar結(jié)尾的文件
lib/
Guacamole會(huì)在這里尋找插件所需要的依賴, 改目錄下的.jar文件對(duì)所有插件可讀
4.3 使用默認(rèn)認(rèn)證
默認(rèn)認(rèn)證的優(yōu)先級(jí)最低,
配置文件優(yōu)先級(jí):
1: guacamole.properties:
user-mapping: /path/to/user-mapping.xml
2: GUACAMOLE_HOME/user-mapping.xml
內(nèi)容類似如下:
vnc
localhost
5900
VNCPASS
username="USERNAME2"
password="319f4d26e3c536b5dd871bb2c52e3178"
encoding="md5">
vnc
localhost
5901
VNCPASS
vnc
otherhost
5900
VNCPASS
每一個(gè) 就是一個(gè)獨(dú)立的用戶
可以通過對(duì)特定的主機(jī)和協(xié)議授權(quán), 默認(rèn)只能使用DEFAULT的connection
4.3.1協(xié)議配置
* vnc:
* hostname: VNC服務(wù)器的主機(jī)名
* 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ù). 該文件的修改會(huì)立即生效.
4.4認(rèn)證配置:
以下使用mysql作為認(rèn)證后端, Guacamole使用mysql需要如下2個(gè)文件:
# 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)建完畢后就需要對(duì)數(shù)據(jù)庫針對(duì)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
注意: 如果版本升級(jí)了 還需要執(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)于各個(gè)表的具體解釋參加: 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)會(huì)有一個(gè)賬號(hào)為: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)證和存儲(chǔ)了; 下面就開始使用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)的賬號(hào)密碼 即可登錄,
在數(shù)據(jù)庫中添加鏈接, 既可以在web中使用.
image.png
總結(jié)
以上是生活随笔為你收集整理的guacamole 源码_Guacamole学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python自动化办公读后感_《Pyth
- 下一篇: 短期工作经历到底要不要写到简历上?