guacamole 源码_Guacamole学习笔记

Guacamole是一个基于HTML5的远程桌面代理,支持VNC、RDP、Telnet、SSH等多种协议。其架构包括web应用、guacd守护进程和客户端插件,通过HTTP私有协议进行通信。Guacamole协议允许不理解远程桌面协议的web应用通过添加协议适配器来支持新的协议。安装涉及Guacamole-server和guacamole-client,依赖包括libjpeg-turbo、cairo、libvncserver等。配置文件主要在$GUACAMOLE_HOME目录,支持默认认证和数据库认证,如MySQL。安装完成后,通过浏览器访问Guacamole web界面进行远程桌面连接。
摘要由CSDN通过智能技术生成

1: 介绍:

Guacamole可以同HTML5来代理远程桌面协议(如: VNC, RDP, Telnet, SSH)

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

2: 架构:

架构图:

aa63006b2edb?utm_campaign=hugo&utm_medium=reader_share&utm_content=note

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界面如下图:

aa63006b2edb?utm_campaign=hugo&utm_medium=reader_share&utm_content=note

image.png

通过默认的账号密码 即可登录,

在数据库中添加链接, 既可以在web中使用.

aa63006b2edb?utm_campaign=hugo&utm_medium=reader_share&utm_content=note

image.png

Guacamole是一款开源的远程桌面协议服务器,用于通过Web浏览器访问各种终端设备,如Linux、Windows等。部署Guacamole需要经过以下几个步骤: 1. **安装依赖**:首先,你需要有一个支持Java的环境,比如JDK,并确保其版本满足Guacamole的要求。通常,推荐使用Java 8或更高。 2. **下载Guacamole**:从Guacamole官网(https://guac-dev.org/download.html)下载最新稳定版的Guacamole Web客户端和服务器软件。 3. **配置数据库**:选择一个数据库存储用户信息和连接信息,如MySQL、PostgreSQL等。Guacamole默认使用HSQLDB作为本地内存数据库,但在生产环境中一般会切换到持久化的数据库。 4. **构建和启动服务**:解压下载的包,进入`guacamole-server`目录,运行`mvn clean install`编译并打包服务器。然后,根据你的需求启动web应用,这通常是通过`bin/guacd.sh`(Linux)或`bin/guacd.bat`(Windows)来启动Guacamole Client Daemon (guacd)。 5. **配置服务器**:编辑`src/main/resources/guacamole.properties`文件,设置数据库连接信息、安全认证机制(如内置、LDAP、OAuth等)、监听端口和其他必要的选项。 6. **部署到服务器**:将生成的war文件上传至Web服务器(如Tomcat、Jetty),并确保其可用并且可以访问相应的端口。 7. **测试连接**:通过浏览器访问`http[s]://yourserver.com:port/guacamole`, 使用管理员账户登录,确认远程桌面功能是否正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值