在ubuntu中搭建guacamole

【写于2016年8月15日】

【由于我目前没有时间尝试其他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交互)。

 

 

0.系统概览

 

 

guacamole作为代理,连接任意位置的RDP server(guacamole和rdp server可以在同一台机器上)。手机和PC,只要有浏览器,且浏览器支持HTML5,那么就可以用浏览器访问guacamole代理。

 

1.最简安装方式

 

首先是有一个最简的安装过程,共三个步骤。

1 $ apt-get install guacamole-tomcat

然后是设置web容器(这里是tomcat7,也可能是其他版本的tomcat,也可能是其他web容器)。这是告诉tomcat,guacamole.war(这个war包及其配置文件,就是guacamole-client) 以及其配置文件在哪里。

1  $ ln -s /var/lib/guacamole/guacamole.war /var/lib/tomcat7/webapps
2  $ 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,要提前做一个设置。打开桌面共享的设置(中文可以直接搜索  桌面共享)。选中允许“其他人查看您的桌面”。另外下边的“必须对为对本机器的每次访问都进行确认”这一项,如果不选中,每次远程连接,都会在这台机器上弹出一个界面问你是否允许,每次你都需要来这里手动点击确定确认一下。所以根据你自己的安全需求,设置这个选项。(下第二张图源于:http://itoedr.blog.163.com/blog/static/12028429720149113614962/)

 

 

启动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.1guacamole-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协议的远程桌面)。

 

 

参考文章:

http://itoedr.blog.163.com/blog/static/12028429720149113614962/

这个链接提供了最简安装方式。

 

http://www.cnblogs.com/ji-yun/p/5657709.html

这个链接提供了官网安装教程的中文翻译

 

http://www.tecmint.com/guacamole-access-remote-linux-windows-machines-via-web-browser/

这个链接提供了完整安装教程,特别是guacamole.properties和user-mapping.xml这两个配置文件的具体使用方法。(英文文章)

posted @ 2016-08-16 10:32 zhang ming 阅读(...) 评论(...) 编辑 收藏