【由于我目前没有时间尝试其他linux系统下的搭建工作,所以这篇文章仅针对在ubuntu下搭建guacamole的情况】
在搭建guacamole之前,需要先准备好操作系统环境,如果可行的话,建议安装最新版的ubuntu(我用一个旧版本(12.04)的搭建的时候,遇到了一些依赖项太老而不兼容的问题,在换了最新版的ubuntu16.04后,这些问题,都没再出现)。这里提供了两种安装方式,可以根据自己的需求任选其一。
在开始之前,先理解guacamole的架构。这幅图来自guacamole官网(http://guacamole.incubator.apache.org/)。在官网的教程中,整个guacamole项目分为两个部分,guacamole-client和guacamole-server。在官网的教程里,这幅图里的guacd就是guacamole-server,这幅图里Servlet Container里的Guacamole就是guacamole-client(为什么如此呢?我的理解是:guacd编译好之后,是作为一个守护进程,独立运行的。它负责与具体的RDP Server/VNC Server等沟通。而Servlet Container里的Guacamole被发送到浏览器里,作为最终的client与guacd这个server交互)。
1.最简安装方式
首先是有一个最简的安装过程,共三个步骤。
$ apt-get install guacamole-tomcat
然后是设置web容器(这里是tomcat7,也可能是其他版本的tomcat,也可能是其他web容器)。这是告诉tomcat,guacamole.war(这个war包及其配置文件,就是guacamole-client) 以及其配置文件在哪里。
$ ln -s /var/lib/guacamole/guacamole.war /var/lib/tomcat7/webapps
$ ln -s /etc/guacamole/guacamole.properties /usr/share/tomcat7/.guacamole
然后是设置配置文件,这是告诉guacamole-client,自己的设置是什么。guacamole-client的配置文件有两个。guacamole.properties和user-mapping.xml。前者主要告诉guacamole-client,guacd(guacamole-server)的地址和端口号,以及user-mapping.xml的位置等。后者主要设置最终用户登录guacamole时的用户名和密码,以及,guacamole要访问的最终RDP Server/VNC Server的ip地址和密码。在这个最简安装方法中,guacamole.properties自己已经配置好,无需修改,只需要修改user-mapping.xml的内容。下面来看一下user-mapping.xml的内容。
<user-mapping>
<authorize
username="guacamoleusername"
password="5f4dcc3b5aa765d61d8327deb882cf99"
encoding="md5">
<connection name="SSH1">
<protocol>ssh</protocol>
<param name="hostname">192.168.0.18</param>
<param name="port">22</param>
<param name="username">gacanepa</param>
</connection>
<connection name="RDP2">
<protocol>rdp</protocol>
<param name="hostname">192.168.0.19</param>
<param name="port">3389</param>
<param name="password">123456</param>
</connection>
</authorize>
</user-mapping>
<authorize>标签里的,username和password是用户在浏览器里登录guacamole的时候,要求的用户名和密码。这里的password是字符串“password”的md5值(这里也可以把参数password设为明文,然后不要encoding="md5")。随后的<connection>标签,是设置要访问的RDP Server/VNC Server的ip地址和访问协议和访问密码。如果最终的RDP Server/VNC Server不需要密码,则可以不要<connection>里的<param name="password“>的项。<connection>项可以有一个或者多个(这个示例里有两个),guacamole支持多个连接,这一点可以从官网首页的演示视频里看到效果。
到这里,最简安装方式就完成了。
(我在安装的时候,只在ubuntu12.04下进行过最简安装,这个时候,这种最简安装方式是不支持rdp代理的。rdp代理的那个模块没有被包含进来。随后在ubuntu16.04中,没有尝试最简安装,不清楚此时最简安装是否支持rdp代理)
这里的最简安装支持vnc。在<connection>里配置任何位置的一个VNC Server都是可以的。只要保证VNC Server可访问就可以了。我这里是用的本机上vnc4server。
如果你跟我一样,也是访问的是ubuntu里的vnc4server,要提前做一个设置。打开桌面共享的设置(中文可以直接搜索 桌面共享)。选中允许“其他人查看您的桌面”。另外下边的“必须对为对本机器的每次访问都进行确认”这一项,如果不选中,每次远程连接,都会在这台机器上弹出一个界面问你是否允许,每次你都需要来这里手动点击确定确认一下。所以根据你自己的安全需求,设置这个选项。
启动vnc4server
$ vnc4server
启动guacd(guacamole-server)
$ guacd
重启tomcat(guacamole-client)
$ sudo /etc/init.d/tomcat7 restart
然后就可以在浏览器里访问了。例如
127.0.0.1:8080/guacamole
这里的ip地址,换成你运行guacamole的地址。然后就会出现如下界面,在这里输入<authorize>标签里设置的用户名"guacamoleusername"和密码"password"(我这幅图里是我的用户名和密码,你换成你设置的就好了)。
就可以登录进去了。
以上是通过最简安装方式部署guacamole,然后使其作为vnc代理的过程。
如果机器A访问机器B,出现访问失败的情况。可以先试着ping一下,看看两台机器是否连通,如果不能连通而网络又没有问题。那么试着关闭ubuntu的防火墙试一试(关闭防火墙的风险自负)。
$ sudo ufw disable
2.源代码编译安装
2.1.guacamole-server(guacd)的编译和安装
源代码编译安装可以自由选择自己需要或者不需要的功能。我这里是把全部的功能都编译进去。
约束:ubuntu16.04 tomcat7 openjdk-8-jdk(一般来说,用最新版的就好了)。tomcat请自行安装。
先编译guacd。也就是guacamole-server的部分。首先需要先安装依赖项。最好各个依赖项都安装最新的版本(其完整的依赖项列表参见官网http://guacamole.incubator.apache.org/doc/gug/installing-guacamole.html)。按如下方式安装依赖项
$ sudo apt-get install libcairo2-dev libjpeg62-dev libpng12-dev libossp-uuid-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libssh-dev
然后去官网下载,稳定版的源代码。注意,可以通过git clone的方式,直接从github里克隆出来编译,但是那是最新的版本,未经过完全测试,编译的时候可能会有更大概率出问题,如果不是非常确定和必要,建议直接从官网提供的下载链接里下载,这是经过充分测试的版本,最大限度提供了对不同环境的适应性。在 http://guacamole.incubator.apache.org/releases/0.9.9/ 可以找到下载链接。我下载的是,截至目前,官网首页发布的稳定版。
下载之后,解压(下载时存储文件的位置,解压后的位置,其实都不重要,因为编译流程完成后,自动就把文件放置到了合适的位置,无需手手动去把文件放置到某个确定的位置)。然后进入到guacamole-server的目录
$ cd guacamole-server/
然后,执行configure命令,它的工作包括检查各个依赖项的情况。
$ ./configure --with-init-dir=/etc/init.d
(这里跟的参数的意思是,把guacd加入到随系统启动的列表中。)
这个命令运行的时候,会有许多输出,也会执行一会儿时间,保持耐心。最重要的信息,它会最后输出。不必担心它快速滚动的很多内容没看见。最后会出现如下图的界面。
这里可以看到,所有的依赖项都yes,表示这些依赖项都准备好了。(这里并不是每个都是必须的,如果你不需要的功能是no,也没关系。不过依赖项里有必要项,必要项是不能缺少的,至于哪些是必要项,官网的依赖项列表里有说明)。如果某一项是no,而你又需要,可以直接通过关键字搜索。安装对应的库。这里要注意,每个库最好都安装最新的。因为我编译的时候,遇到过因为某个库版本太旧而导致运行失败的问题。
然后
$ make
然后
$ make install
到这里guacamole-server安装好了。然后执行ldconfig来更新安装库的时候的缓存
$ ldconfig
然后,就可以
$ guacd
来运行guacd(下次系统启动的时候,guacd会随着系统自动启动)。
2.2.guacamole-client的打包和安装
2.2.1.直接使用打包好的guacamole.war文件
然后是guacamole-client的部分。也就是web容器里的部分。这里其实有个简单的方法。就是在官网下载guacamole-0.9.9.war。然后直接放置使用就可以了。因为guacamole-client其实并不需要编译。它只是需要一个打包过程。而这个.war文件就是打包好的文件。
如果是按照直接下载这个guacamole-0.9.9.war的方式。那么,下载好之后(随便下载到某个位置)。目的是告诉tomcat,guacamole-client(也就是guacamole-0.9.9.war)在哪里。可以通过创建软链接的方式,也可以通过直接把.war文件拷贝过去的方式。这里使用直接把.war文件拷贝过去的方式。
$ cp /Downloads/guacamole/guacamole-0.9.9.war /var/lib/tomcat7/webapps/guacamole.war
注意,拷贝过去后,文件名一定要改为guacamole.war。
2.2.2.手动打包
如果却有必要,可以下载guacamole-client的源码手动打包。最好使用与guacamole-server相同的版本。在官网下载稳定版的guacamole-client的源码(http://guacamole.incubator.apache.org/releases/0.9.9/)。
然后,解压缩。进入到这个目录
$ cd guacamole-client-0.9.9/
然后执行
$ mvn package
打包成功后,会输出build success的信息。打包完成后,在当前目录的子目录guacamole/target(也就是guacamole-client-0.9.9/guacamole/target)中,有guacamole-0.9.9.war文件。按照2.2.1的方式,将其放置到tomcat容器中。记得改名字。
2.2.3.配置guacamole-client
然后就是,最简安装方式里也提到过的配置文件的问题。guacamole.properties 和user-mapping.xml。按现在的方法安装的过程中,到现在,是没有guacamole.properties 和user-mapping.xml这两个文件的。需要自己手动创建。然后填入内容。先创建两个目录(如果已经存在,就不要再创建)
# mkdir /etc/guacamole
# mkdir /usr/share/tomcat7/.guacamole
然后创建文件
# touch /etc/guacamole/guacamole.properties
在刚刚创建的这个文件guacamole.properties中,插入如下内容
guacd-hostname: localhost
guacd-port: 4822
user-mapping: /etc/guacamole/user-mapping.xml
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
basic-user-mapping: /etc/guacamole/user-mapping.xml
这里面user-mapping项和basic-user-mapping项都是指示user-mapping.xml文件的位置。
关于user-mapping.xml的内容。请参见第一种方法里user-mapping.xml文件的内容。这里是一样的。设置好自己要访问的远程桌面的server的位置和密码。
然后创建一个软连接,告诉tomcat到哪里去找guacamole.properties这个配置文件。
# ln -s /etc/guacamole/guacamole.properties /usr/share/tomcat7/.guacamole/
然后是修改配置文件的权限和所有者(否则tomcat即使找到了配置文件也没有权限去读它)
# chmod 600 /etc/guacamole/user-mapping.xml
# chown tomcat7:tomcat7 /etc/guacamole/user-mapping.xml
然后重启tomcat。启动guacd。就完成了。在浏览器里访问
127.0.0.1:8080/guacamole
登录进去。就能看到远端桌面了。
这是我配置一个例子。浏览器通过guacamole代理访问RDP Server(这里是virtualbox,它支持RDP协议的远程桌面)。