guacamole 源码_Guacamole学习笔记

article/2025/9/24 14:55:28

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


http://chatgpt.dhexx.cn/article/IoUWyTKx.shtml

相关文章

Guacamole 介绍以及架构

目前在从事一些虚拟化解决方案方面的工作&#xff0c;最近项目有需求&#xff0c;希望能在浏览器上远程操作虚拟机。 此时发现了Guacamole&#xff0c;一个提供远程桌面的解决方案的开源项目&#xff0c;通过浏览器就能操作虚拟机&#xff0c;适用于Chrome&#xff0c;Firefox&…

使用Google Guava来编写优雅的代码一Guava简介

以往我们在使用工具包的时候首先想到是著名的Apache的Commons系列,今天我要介绍的是同样出色&#xff0c;并且目前发展比Apache Commons系列更为迅速的Google Guava库。 Google Guava库是一个非常优秀的包含很多Java工具类集的库&#xff0c;广泛使用在Google公司内部&#xf…

guacamole学习小结(一)

一、快速安装 https://blog.csdn.net/qq_38781075/article/details/106459458 二、整体理解 先放一张经典的图。 guacamole最重要的作用还是连接远程服务器的&#xff0c;可以连接多台服务器&#xff0c;连接不同的远程协议的服务器。使得用户能远程快捷的访问远程桌面。它跨…

guacamole 认识

简介&#xff1a;guacamole是apache开源的一款连接远程机器(类似window机器的mstsc工具以及linux的 xfreerdp远程工具)的web应用。 官网&#xff1a;http://guacamole.apache.org/ 一、介绍 1、先看看官网提供的架构图 其中guacamole将架构图中 HTML5(JavaScript编写)以及g…

Guacamole搭建教程

目录 安装系统环境安装依赖环境安装依赖包 下载安装包服务端安装解压并安装&#xff1a;在当前目录下继续执行&#xff1a;安装完成之后&#xff0c;可以使用以下来看guacd是否安装成功&#xff1a; 客户端安装安装安装git安装maven 下载客户端并解压创建/etc/guacamole/文件目…

使用EasyDarwin+FFmpeg实现rtsp推流

一、背景 ​ 最近在学习ffmpeg的基本操作,ffmpeg功能非常强大&#xff0c;可以运行音频和视频多种格式的录影、转换、流功能&#xff0c;包含了libavcodec——这是一个用于多个项目中音频和视频的解码器库&#xff0c;以及libavformat——一个音频与视频格式转换库 可以利用ff…

windows 10 安装EasyDarwin流服务器推流、本地存储

1、EasyDarwin介绍 EasyDarwin 是一款开源的、高性能的rstp流媒体服务器&#xff0c;基于go语言开发。主要功能有&#xff1a;支持rtsp推流分发、支持rtsp拉流分发、录像、检索、回访、关键帧缓存、秒开画面、Restful接口、web后台管理、分布式负载均衡等特点。 2、安装部署&a…

从零开始搭建EasyDarwin环境——Windows系统开发环境Golang的搭建

EasyDarwin在语言上服务端使用的是Golang&#xff0c;前端网页是Vue&#xff0c;因此我们需要有Golang和node的开发环境。上一篇我们介绍了Linux环境下的搭建&#xff0c;本章我们将说明一下如何在Windows下搭建起Golang环境。 一、下载 Go包 Go的官方网站&#xff1a;http://…

EasyDarwin源码分析(三)——rtsp-client

rtsp-client.go 这个模块主要实现了客户端的拉流功能。也就是在网页上点击“拉流分发”按钮后&#xff0c;easydarwin会向用户填写的源地址拉流&#xff0c;然后再转发出去&#xff0c;在向源地址拉流的时候&#xff0c;easydarwin相当于是一个rtsp客户端。所以这里使用rtsp-c…

EasyDarwin源码分析(一)——main.go

main.go ​ easydarwin源码的代码量不是很多&#xff0c;主要的代码也就集中在下面的几个文件夹中&#xff0c;核心业务的代码也就主要集中在rtsp包中。 ​ 而且用Go语言写的代码&#xff0c;不像springboot那样&#xff0c;你在读源码前至少要对Springboot框架有一定的学习&a…

关于EasyDarwin二次开发编译后无法以服务启动的问题

问题描述&#xff1a; 在win7上二次开发EasyDarwin后&#xff0c;编译出的EasyDarwin.exe运行正常&#xff0c;或是使用ServiceInstall-EasyDarwin.exe在系统中注册服务&#xff0c;启动服务也正常。 于是打包将其部署在win server 2008上&#xff0c;发现如果直接运行EasyDar…

EasyDarwin接口的使用——使用C++编写客户端实现与EasyDarwin服务器的交互

EasyDarwin提供了接口供客户端使用&#xff0c;以实现客户端与其的交互。比如&#xff0c;根据EasyDarwin的8.1.0版本的接口文档&#xff0c;有获取推流列表的接口如下所示&#xff1a; 我们可以测试一下上述接口。首先启动EasyDarwin服务器&#xff0c;启动后在浏览器&#xf…

EasyDarwin的交叉编译

easyDarwin的交叉编译 前言一、EasyDarwin简介二、配置环境介绍三、交叉编译过程1.go环境的搭建2.编译 后记 前言 最近项目有个需求是在嵌入式设备中运行一个RTSP服务器&#xff0c;满足推流到该服务器后&#xff0c;其他终端设备能够从这个RTSP服务器中拉RTSP流出来。找来找去…

EasyDarwin 流服务器搭建及相关软件教程

一、产品 运行 exe 文件 启动 服务器 双击 运行 EasyDarwin.exe 会出现如下界面&#xff1a; 在 浏览器打开 http://192.168.10.80:10008 2.解压ffmpeg 添加环境变量&#xff1a;复制C:\SoftWare\ffmpeg-6.0-essentials_build\bin路径&#xff0c;添加环境变量中 的用户变…

EasyDarwin —— ubuntu搭建rtsp服务,使用FFmpeg进行rtsp推拉流

开源流媒体服务器 EasyDarwin是由国内开源流媒体团队开发和维护的一款开源流媒体平台框架&#xff0c;从2012年12月创建并发展至今&#xff0c;从原有的单服务的流媒体服务器形式&#xff0c;扩展成现在的云平台架构的开源项目&#xff0c;更好地帮助广大流媒体开发者和创业型企…

EasyDarwin测试

EasyDarwin是由国内开源流媒体团队维护的一款开源流媒体平台框架&#xff0c;开发语言是go语言。本文主要使用它作为RTSP服务器使用&#xff0c;并以此进行测试。方便之后记录。 &#xff08;1&#xff09;软件获取&#xff08;自行下载&#xff0c;具体代码编译方式&#xff0…

流媒体开发之EasyDarwin搭建rtsp server

0 背景 EasyDarwin 旭帆科技开源的流媒体服务器软件&#xff0c;EasyDarwin 社区专注于传统安防&#xff08;RTSP/RTP/Onvif&#xff09;流媒体技术&#xff0c;能够帮助开发者快速搭建流媒体服务平台&#xff0c;更快、更简单地实现流媒体直播与点播功能。本文主要介绍 rtsp …

EasyDarwin ffmpeg+EasyDarwin开源流媒体服务器平台试用笔记(视频流rtsp)

服务 Github https://github.com/EasyDarwin/EasyDarwin , server will invoking ffmpeg. 1. download server 下载EasyDarwin-windows-8.1.0-1901141151 双击EasyDarwin.exe 访问http://127.0.0.1:10008/#/ 2. download FFmpeg 下载FFmpeg : https://github.com/BtbN…

从零开始搭建EasyDarwin环境——linux系统共享目录实现

EasyDarwin是一款高性能开源RTSP流媒体服务器&#xff0c;基于Go语言研发&#xff0c;维护和优化&#xff1a;RTSP推模式转发、RTSP拉模式转发、录像、检索、回放、关键帧缓存、秒开画面、RESTful接口、Web后台管理、分布式负载均衡。EasyDarwin从最初的c到后面的nodejs再到现在…

使用EasyDarwin搭建Rtsp Server从大华摄像头拉流进行多路分发

使用EasyDarwin搭建Rtsp Server从大华摄像头拉流进行多路分发 问题服务搭建推流命令大华摄像头配置 问题 大华摄像头&#xff08;型号&#xff1a; DH-IPC-HDW1235C-A 2.8MM 200万高清网络摄像机 &#xff09;目前支持20路连接&#xff0c;实际使用测试过程中&#xff0c;只能…