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学习笔记相关推荐

  1. caffe源码c++学习笔记

    转载自:深度学习(七)caffe源码c++学习笔记 - hjimce的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/hjimce/article/details/ ...

  2. 深度学习(七)caffe源码c++学习笔记

    caffe源码c++学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/48933845 作者:hjimce 一.预测分类 最近几天为了希望深入 ...

  3. 免费学习机器学习和深度学习的源码、学习笔记和框架分享

    机器学习和深度学习的免费学习源码.学习笔记和框架分享 python笔记 源码 python导入模块的的几种方式 在python中,字典按值排序 python中set的基本常用方法 python取出fr ...

  4. Apollo源码剖析学习笔记2

    Apollo 源码剖析学习笔记2 Talker-ListenerNode 目录中包含了 Node 对象.Reader 对象和 Writer 对象.Node 对象主要对应 Ros 中的 Node 节点, ...

  5. guacamole 源码_guacamole实现上传下载

    看到首先服务端向客户端发送了filesystem请求,紧接着浏览器向服务端发送了get请求,并且后面带有根目录标识("/"). 1. 源码解读 查看指令 /** * Handler ...

  6. guacamole 源码_guacamole插件开发

    Guacamole手册:Guacamole手册 Guacamole是什么? Apache Guacamole是一个无客户端的远程桌面网关. 它支持VNC,RDP和SSH等标准协议. 我们称之为无客户端 ...

  7. guacamole 源码_guacamole实现RDP的下载

    1. 配置说明 1.1 主要特别配置以下三项 enable-drive 默认情况下禁用文件传输,但启用文件传输后,RDP用户可以将文件传输到持久存在于Guacamole服务器上的虚拟驱动器.通过将此参 ...

  8. jQuery源码研究学习笔记(二)

    jQuery总体架构: jQuery模块可以大致分为三部分:入口模块.底层支持模块.功能模块. 参考jQuery技术内幕解析 jquery源码总体架构: (function(window,undefi ...

  9. FATFS文件系统+源码分析——学习笔记

    一.概述 1.目的 在移植之前,先将源代码大概的阅读一遍,主要是了解文件系统的结构.各个函数的功能和接口.与移植 相关的代码等等. 2.准备工作 在官方网站下载了0.12c版本的源代码,利用UE进行阅 ...

最新文章

  1. 独家 | 基于Python的遗传算法特征约简(附代码)
  2. Error:java: 无效的目标发行版: 11解决方案
  3. Asp.Net Core 2.0 多角色权限认证
  4. 汇编语言:第二章 寄存器
  5. Convert、Parse、TryParse、(int)等区别(细节小记)
  6. java任务追踪预警怎么写_分布式系统中如何优雅地追踪日志(原理篇)
  7. 枚举算法:试统计正整数n的阶层n!=1*2*...*n尾部连续零的个数。
  8. POJ3126 Prime Path(BFS)
  9. python开发技术文档范文_常用python编程模板汇总
  10. JavaScript中的navigator对象学习笔记
  11. h3c 链路聚合测试_H3CSE学习之链路聚合
  12. 坚果J10的真实流明到底怎么样?坚果J10有哪些缺点
  13. 已知xyz yzz 532Java_已知 xyz+yzz=532 ,其中 x 、 y 、 z 为数字,编程求出 x 、 y 、 z 的值。_学小易找答案...
  14. 解决java中使用getImage()导入图片失败问题
  15. ! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses
  16. 支付账户体系(分账接口)的9大价值
  17. 华为手表 GT3训练计划怎么用?
  18. java_网络编程学习笔记(一)
  19. Hive的学习和使用
  20. FCRP-D---帆软官网模拟题,tomcat模块

热门文章

  1. USB 2.0 眼图测试
  2. docker mysql volum_Docker 存储卷 Volume 删除和孤单 volume 清理
  3. leetcode5505
  4. 学术写作(Scientifi Academic Writing in English)
  5. p2p下载器是什么?
  6. 金钱观与经济状况的一致性
  7. 如何确定Z检验的值(查正态分布表时要注意中间的数字都是面积,最左边一列和最上面一行都是Z值)
  8. 360为保护用户隐私 遭腾讯打击报复
  9. vue自定义指令之防抖函数
  10. 日志打印输出到控制台以及文件