Apache Guacamole 是无客户端的远程桌面网关。它支持VNC,RDP,SSH等标准协议。guacamole的客户端是html5 web应用程序,所以经过访问浏览器,就能够访问到远程桌面。你们应该使用过Microsoft的mstsc,或者VNC,又或者teamviewer,这些都是基于C/S架构的远程桌面链接组件,而guacamole却作到了基于B/S的远程桌面链接。下图介绍了guacamole的整个体系:html
这里稍做讲解,guacamole包括两大部分,guacamole-client和guacamole-server。client是一个web服务器,实现了对server的远程访问。server则实现了client和远程桌面服务的桥梁。server中包括了一个servlet容器,和一个guacd服务。准确来讲,是这个guacd服务实现了对远程桌面服务的代理。例如,你的远程电脑中安装了一个vnc服务器,那么这个guacd就你能实现从guacamole到这个vnc服务器的链接,完成代理工做。一个完整的guacamole应用体系,至少应该是这样的:一个guacamole-client,一个guacamole-server, server中包括了guacd,一个远程主机的vnc服务器。当用户访问client,client则将请求发送到server,server利用guacd进行协议转化,guacd从远程主机中的vnc服务器中获取实时画面,并将其返回给server,server加工处理后返回给client,用户就能看到一个实时画面监控的页面了。(本文由开源中国-千里明月-原创 ,https://my.oschina.net/u/3490860/。若有雷同,纯属抄袭。)html5
guacamole可以实现多方面的用途,但我主要是为了实现java-web程序的网页远程监控,监控内网中的一部小型服务器。这样子的话,我起码须要三个东西,一个web服务器,一个guacamole服务器部署在Linux上,一个vnc服务(guacamole支持不一样的远程协议,rdp、vnc等,我只实现vnc)部署在远程主机上。要完成这么一个工程,须要各个方面的环境搭建,下面一一介绍。java
我以centOS系统做为guacamole服务器的承载,工具使用secureCRT,经过SFTP传输文件。SFTP的基本命令以下:mysql
pwd 查看远程服务器当前目录; lpwd 查看本地系统的当前目录。 cd <dir> 将远程服务器的当前目录更改成<dir>; lcd <dir> 将本地系统的当前目录更改成<dir>。 ls 显示远程服务器上当前目录的文件名; ls -l 显示远程服务器上当前目录的文件详细列表; ls <pattern> 显示远程服务器上符合指定模式<pattern>的文件名; ls -l <pattern> 显示远程服务器上符合指定模式<pattern>的文件详细列表。 lls 显示本地系统上当前目录的文件名; lls的其余参数与ls命令的相似。 get <file> 下载指定文件<file>; get <pattern> 下载符合指定模式<pattern>的文件。 put <file> 上传指定文件<file>; get <pattern> 上传符合指定模式<pattern>的文件。 progress 切换是否显示文件传输进度。 mkdir <dir> 在远程服务器上建立目录; lmkdir <dir> 在本地系统上建立目录。
部署guacamole须要jdk和tomcat,先下载jdk8,下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htmllinux
将文件经过SFTP传入CentOS,tar -zvxf 命令解压,重命名为java8。而后,配置环境变量。web
输入: sudo vim /etc/profile 编辑环境变量。sql
在/etc/profile文件末尾加入: apache
export JAVA_HOME=java8的路径(能够进入java8目录使用命令“pwd”查看) export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
编辑好以后,保存退出。输入:source /etc/profile 更新环境变量。vim
为了验证环境变量是否配置好,能够输入$JAVA_HOME 查看,若是显示出一行目录,则正常。浏览器
再验证jdk是否配置成功,输入:java -version 若是输入一下相似信息,则成功。
java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0_171-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
tomcat要8.0以上版本就行,下载地址:https://tomcat.apache.org/download-80.cgi
同样的方式,将tomcat传入了Linux,解压,命名为tomcat。编辑环境变量
export CATALINA_HOME=/home/yue/tomcat export CATALINA_BASE= /home/yue/tomcat
最后的/etc/profile文件配置的全部环境变量以下:
执行 source /etc/profile 使环境变量生效
进入tomcat 的bin目录
输入./shtartup.sh
若是输出相似tomcat started的启动信息 ,则没问题。可是咱们必须保证而且内网可以用http://ip:8080的方式访问tomcat,若是不行,看看是否是防火墙或者ip限制的问题,具体设置能够查看iptables的资料 http://man.linuxde.net/iptables。若是不在意安全问题,能够直接关闭防火墙。
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #容许本地回环接口(即运行本机访问本机) iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #容许已创建的或相关连的通行 iptables -A OUTPUT -j ACCEPT #容许全部本机向外的访问 iptables -A INPUT -p tcp --dport 22 -j ACCEPT #容许访问22端口 iptables -A INPUT -p tcp --dport 80 -j ACCEPT #容许访问80端口 iptables -A INPUT -p tcp --dport 21 -j ACCEPT #容许ftp服务的21端口 iptables -A INPUT -p tcp --dport 20 -j ACCEPT #容许FTP服务的20端口 iptables -A INPUT -j reject #禁止其余未容许的规则访问 iptables -A FORWARD -j REJECT #禁止其余未容许的规则访问
我这边是已经配置成功了:
前面提到,Guacamole分为两部分:提供guacd代理和相关库的 guacamole-server,以及为servlet容器(一般为Tomcat)提供客户端的guacamole-client。如今就先构建server。
guacamole-server 包含了guacamole链接到远程桌面的必要组件,这些组件须要依赖一些库。
guacd是guacamole-server的守护进程,接收来自web应用的隧道链接,而后表明guacamole链接到远程桌面。
安装必须的库,来自官方的整理,如下这些库都是必须安装的。
输入不一样命令安装:
sudo yum install cairo-devel sudo yum install libjpeg-turbo-devel 这个若是安装不了就使用 sudo yum install libjpeg-devel sudo yum install libpng-devel sudo yum install uuid-devel 另外还有两个必须安装的 sudo yum install ffmpeg-devel sudo yum install libvncserver-devel
下一步,http://guacamole.apache.org/releases/0.9.14/ 这里下载guacamole-client和server的tar包,经过secureCRT传到Linux,在Linux解压,tar -zxvf 文件名。
在Linux上home/yue目录下新建guacamole文件夹,将解压后的server和client包移动进去。
进入解压后的server包,guacamole-server-0.9.14目录下,执行如下命令:
sudo .configure --with-init-dir=/etc/init.d sudo make sudo make install ldconfig (更新系统已安装库的缓存)
执行: guacd
弹出消息 guacd[23084]: INFO: Guacamole proxy daemon (guacd) version 0.9.14 started 证实server安装成功了。
安装guacamole-client(即web服务器)
进入guacamole-client-0.9.14 执行:
mvn package
$ mvn package [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Build Order: [INFO] [INFO] guacamole-common [INFO] guacamole-ext [INFO] guacamole-common-js [INFO] guacamole [INFO] guacamole-auth-jdbc [INFO] guacamole-auth-jdbc-base [INFO] guacamole-auth-jdbc-mysql [INFO] guacamole-auth-jdbc-postgresql [INFO] guacamole-auth-ldap [INFO] guacamole-auth-noauth [INFO] guacamole-client ... [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] guacamole-common ................................... SUCCESS [ 7.566 s] [INFO] guacamole-ext ...................................... SUCCESS [ 5.594 s] [INFO] guacamole-common-js ................................ SUCCESS [ 1.249 s] [INFO] guacamole .......................................... SUCCESS [ 8.474 s] [INFO] guacamole-auth-jdbc ................................ SUCCESS [ 0.592 s] [INFO] guacamole-auth-jdbc-base ........................... SUCCESS [ 2.548 s] [INFO] guacamole-auth-jdbc-mysql .......................... SUCCESS [ 2.557 s] [INFO] guacamole-auth-jdbc-postgresql ..................... SUCCESS [ 1.990 s] [INFO] guacamole-auth-ldap ................................ SUCCESS [ 1.314 s] [INFO] guacamole-auth-noauth .............................. SUCCESS [ 0.961 s] [INFO] guacamole-client ................................... SUCCESS [ 1.721 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 34.701 s [INFO] Finished at: 2015-06-08T17:03:15-07:00 [INFO] Final Memory: 34M/340M [INFO] ------------------------------------------------------------------------ $
若是,你没有mvn包,那么请先yum install maven
这个时候在当前目录的guacamole/target目录下,会有个guacamole-0.9.14.war包。将这个包复制到tomcat的webapps目录下。这个tomcat就用咱们上面配置好的。
sudo cp guacamole-0.9.14 tomcat的webapps目录/guacamole.war
好了,启动tomcat,局域网内访问服务器的8080端口, http://ip:8080/guacamole,你会看到这样的画面
可是此时,你点击登陆是没有任何做用的,由于还要配置一些东西。
一、GUACAMOLE_HOME
GUACAMOLE_HOME
是Guacamole的默认配置目录,可在/etc/profile中指定此目录:
末尾加入 export GUACAMOLE_HOME=/home/yue/guacamole
固然若是不作配置,guacamole也会默认将/etc/guacamole做为GUACAMOLE_HOME,可是你须要本身去新建这个目录。为了方便,我将它配置成了和server包,client包同一目录。即
/home/yue/guacamole
在该目录下新建
guacamole.properties
这是主要的Guacamole配置文件。该文件中的属性规定了Guacamole将如何链接到guacd。在文件中写入:
guacd-hostname:localhost
guacd-port:4822
二、新建logback.xml
Guacamole使用称为Logback的日志系统来处理全部消息。默认状况下,Guacamole只会登陆到控制台,但能够经过提供你本身的Logback配置文件来改变它。咱们写成这样就好:guacamole运行时,会生成guacamole.log在当前目录,记录全部debug级别的日志。
<configuration> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>/home/yue/guacamole/guacamole.log</file> <encoder> <pattern>%msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="FILE" /> </root> </configuration>
3.新建user-mapping.xml 写入
<user-mapping> <authorize username="test" password="test"> <protocol>vnc</protocol> <param name="hostname">192.168.162.15</param> <param name="port">5900</param> </authorize> </user-mapping>
这里是说,新增一个vnc服务器,服务器地址为192.168.162.15,vnc全部端口为5900,guacamole链接这个vnc服务器的用户名和密码为test,test。接下来的操做,不用我说也知道,
若是想配置多个链接,就写多个authorize节点。
到此为止,GUACAMOLE_HOME的目录下如今一共有一下几个文件,
guacamole-client-0.9.14 guacamole-server-0.9.14 guacamole.properties logback.xml user-mapping.xml
user-mapping.xml文件写入后,guacamole会自动去读取,等一下子后,就能生效,不须要重启guacd或者tomcat。
不过,若是你觉得这样就能完事的话,那就错了 ,由于还差最后一步,远程主机vnc服务器的搭建!
vnc-server下载地址 https://www.realvnc.com/en/connect/download/vnc/
在远程主机安装vnc-server,我这里的远程主机是window系统,ip地址为192.168.162.15,因此直接安装exe就好。为了测试容易,把防火墙也关了吧,省得存在访问限制问题。vnc服务器须要关闭密码保护, 否则guacamole不能链接成功,端口也设置成5900。大概设置以下
好了,这个时候在guacamole登陆页面上输入test,test登陆,就能看到远程主机的实时画面了。
下一篇博客,我将会写若是本身构建web程序,代替guacamole-client,并嵌入到java程序中,实现web系统集成guacamole。