一、guacamole是什么

guacamole是一个完全可以通过web界面来管理连接VNC、SSH、RDP(windows远程桌面)、telnet相关协议连接的一套组件 。其是基于Websocket + HTTP的方式实现的连接 。其架构图如下:

guacamole-arch
guacamole-arch

从上图也可以看出Guacamole有2个部分构成:

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

上图中的 guacd 就是server编译后对接出的命令,而 client端安装比较将单就是一个tomcat war项目,可以使用管方编译好的,也可以自行下载源码,使用mvn编译出war 文件。

更详细的项目介绍可以查看官方文档: ,也可以查看国中翻译版本:https://www.cnblogs.com/ji-yun/p/5657709.html

二、guacamole server的安装

server 前需要安装一些依赖,其中必选依赖如下:

  • Cairo 是被libguac 用来绘图的. 没有它Guacamole就实现不了此功能
  • libjpeg-turbo 为libguac 提供 JPEG 的支持。没有它Guacamole就无法编译。libjpeg-turbo 在你的平台上不可用, 并且你不希望用源码编译它, libjpeg 也会照常工作,只是速度不会那么快
  • libpng 被 libguac 用来写PNG 图像, 它是Guacamole 协议使用的核心图像类型. Guacamole 没有libpng就不能正常运转..
  • OSSP UUID 被libguac 用来设计每一个Guacamole连接唯一的 ID. 这些唯一的ID是连接分享的基础。

除此之外还有可选依赖,可选依赖主要是几个连接协议对应的包。具体可以在官网: 找到相关内容。

这里以centos6/7为例,介绍下安装过程(安装前,请先装下epel 源,因为一些包在base源中没有):

1、安装必须依赖

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

安装完可能会提示:No package uuid-devel available. ,这就需要通过源码编译来安装此依赖,通过guacamole官方链接的uuid包的官方无法正常下载(ftp://ftp.ossp.org/pkg/lib/uuid/uuid-1.6.2.tar.gz),我这里使用了镜像站的下载地址:http://www.mirrorservice.org/sites/ftp.ossp.org/pkg/lib/uuid/uuid-1.6.2.tar.gz 可以成功下载。下载好后,使用下面的命令编译即可:

1./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc

2、可选依赖

1yum -y install freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel pulseaudio-libs-devel openssl-devel  libvorbis-devel libwebp-devel

这里命令执行后也会提示有个别包未安装,如果必须要的,可以自行手动编译,如果未使用到该协议的,不成功也没关系。我这里因为主要是测试使用,有两个包也未成功安装,在编译guacamole的时候,界面如下:

guacamole
guacamole

从上图看出,只有 vnc 协议不支持,其他协议的支持并不受影响。

3、guacamole server安装编译

guacamole server的下载地址为: 解包后,通过如下命令进行安装:

1cd guacamole-server-0.9.14
2./configure --with-init-dir=/etc/init.d
3make
4make install

安装成功后,在/etc/init.d目录下会有guacd 的服务产生。 ### 三、guacamole client安装

还是打开上面的下载地址,找到对应的client的war文件下载,下载之前也请登陆tomcat.apache.org下载tomcat包(也可以使用源里带的tomcat包),我这里选择的tomcat.apache.org上下载的。将对应下载的war文件存放到tomcat的webapp目录(先清空该目录里的哪些管理功能 —- 留着就是祸害,很容易被漏洞利用或默认获权)。

如果想要源码编译,可以使用如下命令生成war文件:

1git clone git://github.com/glyptodon/guacamole-client.git
2mvn package

个人觉得如非二次开发之类的需求,跟本无需使用mvn命令编译生成war包,官方提供的war就可以。正常启动后,就可以打开对应的web登陆界面。

guacamole-client
guacamole-client

注:不像很多web程序,这里没有默认的用户名密码,用户名密码是需要后面进行配置的。

四、基础认证与配置

基础认证就是要连接的主机信息和用户信息都不存在数据库里,只保存在相应的文件里即可。默认使用的是基础认证(当然程序支持各种流行的后端认证方式:mysql 、plsql、sqlserver、openldap、还有二次验证等,这个后面再说)。

1、 GUACAMOLE_HOME

GUACAMOLE_HOME 就是guacamole的配置存放的目录 ,其可以从如下三个地方读取:

  • 1: 系统的guacamole.home属性
  • 2: 系统的GUACAMOLE_HOME变量
  • 3: 运行程序用户的.guacamole目录

这里我们就根据默认惯例使用/etc/guacamole/目录存放配置文件,也无需使用其他环境变量(另两种情况主要是针对普通用户安装时对/etc目录没有写权限的情况)。该目录下可以使用的配置和参数如下:

 1guacamole.properties:
 2    决定Guacamole如何连接到guacd, 也可以定义插件
 3    api-session-timeout:
 4        单位: 分钟
 5        默认: 60
 6        Guacamole会话的空连接时间
 7guacd-host:
 8    Guacamole代理的监听地址, 默认localhost
 9guacd-port:
10    Guacamole代理的监听端口, 默认4822
11guacd-ssl:
12    Web应用和guacd之间是否使用SSL/TLS, 默认false
13logback.xml:
14    Guacamole使用Logabck来记录日志, 默认记录到console, 也可以指定自己的Logback配置文件
15    服务代理程序默认会记录日志.
16extensions/:
17    存放Guacamole的插件, 启动时默认会加载所有已.jar结尾的文件
18lib/
19    Guacamole会在这里寻找插件所需要的依赖, 改目录下的.jar文件对所有插件可读

2、guacamole.properties配置

创建/etc/guacamole/guacamole.properties文件,这里我们只简单的写四行就行了:

1guacd-hostname: localhost
2guacd-port:     4822
3user-mapping:  /etc/guacamole/user-mapping.xml
4enable-clipboard-integration: true

前两行是server的地址和端口,如果client web和server未安装在同一台上,也可以配置其他IP。

3、user-mapping.xml配置

配置示例如下:

 1<user-mapping>
 2    <authorize username="itybku" password="319f4d26e3c536b5dd871bb2c52e3178" encoding="md5">
 3    <connection name="testhost10">
 4                <protocol>ssh</protocol>
 5                <param name="hostname">192.168.1.10
 6                <param name="port">22
 7                <param name="username">root
 8                <param name="password">123456
 9                <param name="enable-sftp">true  #sftp参数配置(没有安装则以下sftp可不用添加)
10                <param name="sftp-hostname">192.168.1.10
11                <param name="sftp-root-directory">/data/sftp
12                <param name="sftp-username">sftp
13                <param name="sftp-password">123456
14                <param name="color-scheme">white-black #远程登录显示字体颜色
15    </connection>
16    <connection name="Windows server">
17           <protocol>rdp</protocol>
18           <param name="hostname">192.168.0.19
19           <param name="port">3389
20               <param name="username">administrator
21    </connection>
22    </authorize>
23</user-mapping>

其中itybku是登陆web界面的用户名密码,后面的password是使用md5加密的密码,具体可以使用如下方法生成加密密码:

1printf '%s' "www.361way.com" | md5sum

当然web界面的用户名密码也可以使用明文配置,只需要更换authorize 为如下内容:

1<authorize username="itybku" password="PASSWORD">

该文件里可以配置多个用户,不用的用户管理不同的主机。

五、启用管理

使用下面的命令启动guacamole及其管理界面:

1/etc/init.d/guacd start
2sh startup.sh  (tomcat目录)

登陆管理界面,就可以查看对应的主机信息如下:

guacamole-web
guacamole-web

进期连接过的主机会以缩略图的方式在上面显示。此时也可以使用chrome浏览器,F12打开发模式界面,在console里查看websocket的连接信息,你如果足够牛X,也可以看下源码,在浏览器的console里进行websocket交互。

本篇同容先到这里,后面可以聊下连接数据的配置。