Guacamole实战

/ 工具 / 没有评论 / 2069浏览

Guacamole实战

一 概述

1.1 背景

最近在研究远程登录服务器的方式,可以用来实现登录堡垒机功能,关注到了apache的guacamole项目在此记录下学习笔记以备后用。

1.2 guacamole是什么

guacamole是一种HTML5 Web应用程序,可使用远程桌面协议(例如VNC或RDP)提供对桌面环境的访问。guacamole也是产生此Web应用程序的项目,并提供驱动它的API。该API可用于为其他类似的应用程序或服务提供支持。“ Guacamole”最常用于指代Guacamole项目使用其API生成的Web应用程序。此Web应用程序是堆栈的一部分,该堆栈提供了与协议无关的远程桌面网关。Guacamole的客户端部分使用JavaScript编写,仅使用HTML5和其他标准,在访问所提供的任何台式机时,仅需要现代的Web浏览器或启用Web的设备即可。从历史上看,guacamole是HTML5 VNC客户端,在此之前,JavaScript Telnet客户端称为RealMint(“ RealMint”是“ terminal”的字谜),但是情况不再如此。Guacamole的体系结构已发展为通常包含远程桌面,并且可以用作任何数量的计算机的网关。最初是概念验证的现在性能足以满足日常使用,并且所有的开发都在上完成。作为一种API,Guacamole提供了一种通用且有效的方法,可使用HTTP或WebSocket通过基于JavaScript的隧道流式传输文本数据,以及一种客户端实现,该实现支持Guacamole协议,并与来自Windows的Guacamole协议流结合使用时可以呈现远程显示。隧道。它提供了跨浏览器的鼠标和键盘事件,一个XML驱动的屏幕键盘以及具有硬件加速合成功能的同步嵌套层。希望通过HTML5提供远程桌面支持的项目可以通过将API集成到其应用程序或服务中来利用Guacamole多年的研发经验。

1.3 为什么使用guacamole

使用guacamole的主要原因是可以在全球范围内不受限制地访问您的计算机。Guacamole允许从任何地方远程访问一个或多个桌面,而无需安装客户端,尤其是在无法安装客户端时。通过设置Guacamole服务器,您可以从世界上几乎任何地方的Internet上的任何其他计算机访问网络上的任何其他计算机。甚至可以使用手机或平板电脑,而无需安装任何东西。作为仅通过HTTP或HTTPS进行通信的真正的Web应用程序,Guacamole允许您从任何地方访问计算机,而无需违反工作场所的策略,也无需安装特殊客户端。代理或公司防火墙的存在不会阻止guacamole的使用。

1.4 从任何设备访问您的计算机

由于Guacamole只需要一个相当快速,符合标准的浏览器,因此Guacamole将在许多设备上运行,包括手机和平板电脑。Guacamole是专门为不在乎是否具有鼠标,键盘,触摸屏或它们的任何组合而设计的。Guacamole背后的主要设计理念之一是,永远不要仅仅因为您的浏览器具有或缺少特定功能(例如触摸事件或小屏幕)就假定您拥有特定的设备(例如手机)。Guacamole的代码库同时支持鼠标和触摸事件,而不需要一个选择另一个,而该界面旨在不考虑屏幕大小而可用。除错误外,您几乎应该可以在带有网络浏览器的任何现代设备上使用Guacamole

1.5 guacamole架构及解析

Guacamole是一个提供了基于HTML5 web应用程序的远程桌面代理服务器。通过使用Guacamole服务器,我们很轻松的在浏览器上远程访问Guacamole代理的主机,是一个无客户端远程桌面网关。支持标准协议,如VNC、RDP、SSH。称他为无客户端,是因为没有插件和客户端软件被要求。由于HTML5,一旦Guacamole 被安装到服务端,通过web 浏览器就可以访问你的桌面。

1

我们可以在浏览器访问Guacamole页面的时候,此时,浏览器会通过HTTP使用Guacamole协议与Guacamole 服务器中的Web服务器进行连接。Guacamole Web应用会从用户的请求中读取Guacamole协议,并将其转发给guacd(本地Guacamole代理)。Guacd根据web 应用转发过来的Guacamole协议来代替用户连接到远程桌面服务器。在Guacamole Web应用与guacd进行通信的时候,两者均不需要知道实际使用的远程桌面协议是什么,即协议不可知性。

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

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

guacd是Guacamole动态支持多种远程桌面协议(这里统称为客户端插件)和基于web连接远程桌面协议的核心. guacd是一个安装在Guacamole上后台运行的守护进程, 等待来自web的连接. guacd也不需要理解特定的远程桌面协议, 一旦客户端插件开始启动, 他和guacd独立运行, 并且拥有和web应用完全的同学权限.

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

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

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

一旦开发者掌握了HTML5的canvas标签, 并且看到他已经被Firefox和Chrome支持了, 就有人想做个JS的的VNC客户端的POC. 这个客户端是纯JS实现的,客户端用的JAVA, 通过将VNC翻译为XML版的. 该客户端的开发是基于VNC本身功能驱动的, 开发范围限制于将一个单独的连接转发给一组用户. 虽然看法速度不是很快,但是足够POC和项目需求了. 在SourceForge上通过Guacamole。

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

二 安装部署

guacamole分为两部分,server和client,client端一半都用sdk来代码集成或API来在自己的业务中来实现调用

2.1 编译安装guacamole server

guacamole-server提供的guacenc实用程序将屏幕录制内容转换为视频,它依赖于FFmpeg,只有在至少安装了FFmpeg提供的libavcodec,libavutil和libswscale库的情况下才能构建。

rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

yum clean all
yum install epel-release -y

yum install -y freerdp-plugins gcc gnu-free-mono-fonts pv libjpeg-devel freerdp-devel libssh2-devel libvorbis-devel libwebp-devel pulseaudio-libs-devel libvncserver-devel libssh-devel pango-devel ffmpeg ffmpeg-devel openssl-devel dialog libtelnet-devel wget cairo-devel libpng-devel uuid-devel

yum localinstall http://sourceforge.net/projects/libjpeg-turbo/files/libjpeg-turbo-official-1.5.2.x86_64.rpm -y
ln -vfs /opt/libjpeg-turbo/include/* /usr/include/
ln -vfs /opt/libjpeg-turbo/lib??/* /usr/lib64/

cd /tmp
wget http://sourceforge.net/projects/guacamole/files/current/source/guacamole-server-0.9.14.tar.gz
tar -xvpf guacamole-server-0.9.14.tar.gz
cd guacamole-server-0.9.14
./configure --with-init-dir=/etc/init.d
make && make install
ldconfig

三 guacamole配置

安装Guacamole之后,您需要先配置用户和连接,然后Guacamole才能工作。本章介绍了guacamole的常规配置及其默认身份验证方法的使用。

Guacamole的默认身份验证方法从一个名为user-mapping.xml的文件中读取所有用户和连接。此身份验证方法旨在为:

不管使用哪种身份验证方法,Guacamole的配置始终由两个主要部分组成:一个名为GUACAMOLE_HOME的目录,它是配置文件的主要搜索位置;以及guacamole.properties,它是Guacamole及其扩展名使用的主要配置文件。

3.1 GUACAMOLE_HOME(/etc/guacamole)

GUACAMOLE_HOME是Guacamole的配置目录的名称,默认情况下位于/ etc / guacamole。所有配置文件,扩展名等都位于此目录中。GUACAMOLE_HOME的结构经过严格定义,并包含以下可选文件:

guacamole的主要配置文件。该文件中的属性决定了guacamole如何连接到guacd,并可以配置已安装的身份验证扩展的行为。

guacamole对所有消息使用称为Logback的日志记录系统。默认情况下,Guacamole仅将日志记录到控制台,但是您可以通过提供自己的Logback配置文件来更改它。

所有Guacamole扩展程序的安装位置。guacamole会在启动时自动加载此目录中的所有.jar文件。

guacamole扩展名所需的库的搜索目录。guacamole将使该目录中的.jar文件可用于所有扩展名。如果您的扩展需要其他库,例如数据库驱动程序,那么在这里放置它们是适当的地方。

覆盖GUACAMOLE_HOME

如果您不能或不希望将/ etc / guacamole用于GUACAMOLE_HOME,则可以通过以下任何一种方法来覆盖该位置:

3.2 guacamole.properties

3.3 Web应用日志

默认情况下,Guacamole将会记录所有控制台日志。比如Tomcat等Servlet容器会自动重定向这些消息到一个日志文件中,使用Tomcat时为catalina.out,在Guacamole运行时该文件只读。日志消息分为四个不同的等级,根据消息的重要性和严重性分为:

Guacamole日志消息使用一个

四 guacd配置

可以在系统的/etc/guacd.conf中编写配置内容

[daemon]

pid_file = /var/run/guacd.pid
log_level = info

[server]

bind_host = localhost
bind_port = 4822

#
# The following parameters are valid only if
# guacd was built with SSL support.
#

[ssl]

server_certificate = /etc/ssl/certs/guacd.crt
server_key = /etc/ssl/private/guacd.key

配置参数

SectionNameDescription
daemonpid_fileThe name of the file in which the PID of the main guacd process should be written. This is mainly needed for startup scripts, which need to monitor the state of guacd, killing it if necessary. If this parameter is specified, the user running guacd must have sufficient permissions to create or modify the specified file, or startup will fail.
daemonlog_levelThe maximum level at which guacd will log messages to syslog and, if running in the foreground, the console. If omitted, the default level of info will be used.Legal values are trace, debug, info, warning, and error.
serverbind_hostThe host that guacd should bind to when listening for connections. If unspecified, guacd will bind to localhost, and only connections from within the server hosting guacd will succeed.
serverbind_portThe port that guacd should bind to when listening for connections. If unspecified, port 4822 will be used.
sslserver_certificateThe filename of the certificate to use for SSL encryption of the Guacamole protocol. If this option is specified, SSL encryption will be enabled, and the Guacamole web application will need to be configured within guacamole.properties to use SSL as well.
sslserver_keyThe filename of the private key to use for SSL encryption of the Guacamole protocol. If this option is specified, SSL encryption will be enabled, and the Guacamole web application will need to be configured within guacamole.properties to use SSL as well.

五 使用guacd

可从Web浏览器中访问桌面的许多功能。尽管大多数人仅在绝对必要时才使用远程桌面工具,但我们认为必须以成为访问桌面的主要手段为目标,因此该界面应尽可能地无缝且不显眼。

5.1 Home screen

成功登录后,您将被带到列出所有可用连接的Guacamole主屏幕,或者如果您只能访问一个连接,则直接进入该连接。主屏幕将包含您有权访问的所有连接的列表,以及任何最近使用或活动的连接的缩略图。如果您可以访问大量连接并且希望快速找到特定的连接,则还可以在“过滤器”字段中输入搜索字词,以按名称过滤连接列表

5.2 Client screen

打开连接后,您将看到远程显示器的实时视图。您可以像使用普通台式机一样与此显示交互。鼠标和键盘的功能就像直接连接到远程计算机一样。

参考链接