Guacamole实战

网友投稿 1118 2022-05-30

一 概述

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的设备即可。从历史上看,鳄梨酱是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 浏览器就可以访问你的桌面。

我们可以在浏览器访问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应用不需要知道具体运行的什么协议.

Guacamole协议

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

Guacd

guacd是Guacamole动态支持多种远程桌面协议(这里统称为客户端插件)和基于web连接远程桌面协议的核心. guacd是一个安装在Guacamole上后台运行的守护进程, 等待来自web的连接. guacd也不需要理解特定的远程桌面协议, 一旦客户端插件开始启动, 他和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和项目需求了. 在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是否已正确设置。

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

3.1 GUACAMOLE_HOME(/etc/guacamole)

Guacamole实战

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

guacamole.properties

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

logback.xml

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

extensions/

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

lib/

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

覆盖GUACAMOLE_HOME

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

在运行servlet容器的用户的主目录中创建一个名为.guacamole的目录。如果该目录存在,它将自动用于GUACAMOLE_HOME。

使用环境变量GUACAMOLE_HOME指定备用目录的完整路径。确保查阅servlet容器的文档,以确定如何正确设置环境变量。

使用系统属性guacamole.home指定备用目录的完整路径。

3.2 guacamole.properties

名字为guacamole.properties的文件是Guacamole web应用程序使用的主要配置文件。Guacamole或它的其它扩展通过读取该文件能够定位所有配置属性。

在之前的发行版中,这个文件必须在你的servlet容器类路径中。现在,guacamole.properties能够被环境变量或系统属性指定路径,只有类路径才被作为最后的途径。在Guacamole搜索guacamole.properties时会按顺序检查:

1. 在上面定义的GUACAMOLE_HOME中。

2. Servlet容器的类路径中。

当默认的配置不符合要求时,才需要配置guacamole.properties文件,或者为扩展提供额外的配置信息。下面是一些标准的配置属性:

**api-session-timeout**

时间是以分钟为单位,允许Guacamole回话(验证令牌)在用户无活动时保持有效。如果忽略设置,Guacamole回话就会在无活动后60分钟到期。

**available-languages**

用英文逗号把语言关键字白名单隔开,这是允许在Guacamole接口中使用的语言。例如:限制Guacamole只能用英语和法语:

available-languages: en, de

当找不到对应语言的翻译文件时,英语将作为备用语言。仅仅当你完全确定不会缺失字符时,才可以在配置列表里取消英语。

**guacd-host**

Guacamole代理守护进程默认监听的主机。如果忽略设置,Guacamole将默认监听localhost。

**guacd-port**

Guacamole代理守护进程默认监听的端口。如果忽略设置,Guacamole将默认监听4822端口。

**guacd-ssl**

如果设置为“true”,Guacamole将在web应用程序和guacd间用SSL/TLS加密。默认情况下,web应用程序和guacd之间的连接不加密。

注意,如果你启用了这个选项,你必须用命令行选项配置guacd使用SSL。这些选项的文档在guacd的手册中。你需要一个SSL证书和私钥。

Example 5.1. Example **guacamole.properties**

# Hostname and port of guacamole proxy

guacd-hostname: localhost

guacd-port: 4822

3.3 Web应用日志

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

error

致命的错误。被日志描述的操作不能继续执行,该错误是个严重需要去解决的问题。

warn

警告通常不是致命的。操作能继续执行,但是个值得注意的问题。

info

普通的信息。这些也许有用,或只是为了引起管理员的注意,但对Guacamole服务器来说,通常不是重要的操作。

debug

面向开发的详细调试信息。几乎所有的调试信息都包含堆栈追踪和内部信息,这些信息在代码中调查问题时非常有用。这些预期的调试信息虽然冗长,但不会影响性能。

trace

追踪信息和调试信息类似的故意冗长,但是如此低级别且频繁的信息会影响性能。追踪级别的信息很少的情况下才有设置的必要,主要是在调查问题时提供非常详细的信息。

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

配置参数

五 使用guacd

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

5.1 Home screen

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

5.2 Client screen

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

参考链接

http://guacamole.apache.org/doc/gug/installing-guacamole.html

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:还在一个个写规则?来了解下爬虫的智能化解析吧!
下一篇:HarmonyOS 源码移植
相关文章