Guacamole搭建,一个基于HTML5的远程桌面

Posted cuiran

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Guacamole搭建,一个基于HTML5的远程桌面相关的知识,希望对你有一定的参考价值。

介绍

Guacamole可以同html5来代理远程桌面协议(如: VNC, RDP, Telnet, SSH)
官网: http://guac-dev.org/
其由许多部件组成的轻量级web应用程序,大部分的功能依靠Guacamole的底层组件>来完成。

用户通过浏览器连接到Guacamole的服务端。Guacamole的客户端是用javascript编写的,Guacamole server通过web容器(比如tomcat)把服务提供给用户。一旦加载,客户端通过http承载着Guacamole自己的定义的协议与服务端通信。

部署在Guacamole server这边的Web应用程序,解析到的Guacamole protocal,就传给Guacamole的代理guacd(中间层),这个代理(guacd)实际上就是解析Guacamole protocal,替用户连接到远程机器

架构

架构图

架构解释

用户通过浏览器连接到Guacamole的服务端, Guacamole通过JS写的客户端是为用户提供服务, 服务端和客户端的通信是基于HTTP的私有协议; web应用就是将浏览器客户端的内容接受处理并转发guacd, 就是一个本地代理, Guacamole的协议和提供给guacd的协议是无关的, Guacamole的客户端和web应用不需要知道具体运行的什么协议.

关于Guacamole协议:

web应用完全不需要理解远程桌面协议, 但必须要理解Guacamole的协议(远程显示渲染和事件传输),
而作为一个远程显示和交互协议, Guacamole是现有远程连接协议的集合. 想让Guacamole支持一个新的协议 只需要下一个"翻译"协议的中间层即可. 这个中间件就是guacd

关于web应用

web应用是直接和用户交付的组件.web应用不依赖远程桌面协议, 而依赖guacd; web应用的唯一左右就是提供一个漂亮的web界面和认证.
目前主要用java来写的web应用, 但它可以基于任何语言重写; Guacamole的重点在于API.

关于RealMint

Guacamole现在是一个通用的远程桌面网关, 但并不绝对. Guacamole开始于一个纯净的基于文本的JS写的名字叫做ReaMint的telnet客户端, 这个主意起源于演示, 之所以出名主要是由于他是纯JS写的.

RealMint的隧道主要是用php写的, 相对于Guacamole的HTTP的隧道, RealMint的隧道只是简单的长轮询, 并且效率低下. 但是RealMint的键盘部分实现的很好, 目前吸收到了Guacamole中, 但也仅此而已了.

关于VNC客户端

一旦开发者掌握了HTML5的canvas标签, 并且看到他已经被Firefox和Chrome支持了, 就有人想做个JS的的VNC客户端的POC.

这个客户端是纯JS实现的,客户端用的JAVA, 通过将VNC翻译为XML版的. 该客户端的开发是基于VNC本身功能驱动的, 开发范围限制于将一个单独的连接转发给一组用户. 虽然看法速度不是很快,但是足够POC和项目需求了. 在Guacamole官网是可以找到的。

关于远程桌面网关

开发一个基于文本协议的快速协议即可代表多个远程管理协议. 整个系统以后台运行形式重新构建了, 项目的范围扩展到相对于一个快速的HTML5的远程桌面协议功能足够的VNC客户端和通用API. 现在Guacamole可以用作一个中心网关来连接多个运行不同协议的桌面. 同时也提供可扩展的认证, 当然这里就需要可以通过HTML5访问的一个通用API.

安装

Guacamole有2个部分:
Guacamole-server: 提供代理和相关依赖库
guacamole-client: 提供服务端容器(如Tomcat)运行的客户端

Guacamole-client可以直接使用二进制程序, 但Guacamole-server就需要通过源码按照了(不要灰心, 很简单的, 并且编译过程也是自动化的)

以下以CentOS为例介绍按照过程:

系统环境:

CentOS7.2 + Tomcat8.5 + JDK18 + guacamole-server1.1.0

安装依赖环境:

rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro

yum -y install
http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm

安装依赖包

yum -y install cairo-devel libjpeg-devel libpng-devel uuid-devel 

yum -y install ffmpeg-devel freerdp-devel pango-devel libssh2-devel 

yum -y install libtelnet-devel libvncserver-devel pulseaudio-libs-devel 

yum -y install openssl-devel libvorbis-devel libwebp-devel

yum -y install freerdp-plugins

下载安装包:

访问链接:
https://guacamole.apache.org/releases/1.1.0/
如图

tar -zvxf guacamole-server-1.1.0.tar.gz -C /opt
cd /opt/guacamole-server-1.1.0/
./configure --with-initdir=/etc/init.d
make #编译
make install #安装

启动服务

service guacd start

提示SUCCESS,表示安装成功。

安装client

下载链接中的guacamole-1.1.0.war,然后放入tomcat webapps目录下(tomcat安装省略)。然后启动tomcat 访问链接
http://192.168.0.46:8088/guacamole/#/

配置

创建guacamole配置文件和目录

mkdir /etc/guacamole/

创建guacd.conf和guacamole.properties文件

guacd.conf

[server]
bind_host = 0.0.0.0
bind_port = 4822

guacamole.properties

# Hostname and port of guacamole proxy

guacd-hostname: 0.0.0.0

guacd-port:     4822

enable-websocket: true

enable-clipboard-integration: true

# auth-provider: net.sourceforge.guacamole.net.auth.noauth.NoAuthenticationProvider

# noauth-config: /etc/guacamole/noauth-config.xml

 auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider

 basic-user-mapping: /etc/guacamole/user-mapping.xml

创建授权文件 user-mapping.xml

具体如图所示:

重启guacd和tomcat并登录即可。

最后,分享一个演示的视频

guacamole搭建,一个基于HTML5的远程桌面

以上是关于Guacamole搭建,一个基于HTML5的远程桌面的主要内容,如果未能解决你的问题,请参考以下文章

远程桌面网关 guacamole 配置指南

Dockerfile实现客户端通过网页访问容器的桌面和伪终端,主要的工具是guacamole

Apache Guacamole RDP 远程代码执行漏洞(CVE-2020-9497/9498)预警

漏洞告警-Apache Guacamole RDP 远程代码执行漏洞CVE-2020-9497/9498

基于H5的Speedtest网速测试工具搭建

HTML5 Access:基于H5的远程桌面及Telnet/SSH接入方案