最新消息:

Apache Guacamole 基于 Web 的 VNC 客户端介绍以及架构 及安装

其他技术 koic_zhzz 134浏览 0评论

一 概述

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 浏览器就可以访问你的桌面。

Apache Guacamole 基于 Web 的 VNC 客户端介绍以及架构 及安装-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应用不需要知道具体运行的什么协议.

  • Guacamole协议

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

  • Guacd

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

  • 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_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

配置参数

Section Name Description
daemon pid_file The 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.
daemon log_level The 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.
server bind_host The 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.
server bind_port The port that guacd should bind to when listening for connections. If unspecified, port 4822 will be used.
ssl server_certificate The 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.
ssl server_key The 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

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

转载请注明:落伍老站长 » Apache Guacamole 基于 Web 的 VNC 客户端介绍以及架构 及安装

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址