本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/  该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。

一、简介

Apache Guacamole 是无客户端的远程桌面网关。它支持VNC,RDP,SSH等标准协议。guacamole的客户端是html5 web应用程序,因此通过访问浏览器,就可以访问到远程桌面。大家应该使用过Microsoft的mstsc,或者VNC,又或者teamviewer,这些都是基于C/S架构的远程桌面连接组件,而guacamole却做到了基于B/S的远程桌面连接。下图介绍了guacamole的整个体系:

这里稍作讲解,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/。如有雷同,纯属抄袭。)

二、适应场景

guacamole能够实现多方面的用途,但我主要是为了实现java-web程序的网页远程监控,监控内网中的一部小型服务器。这样子的话,我起码需要三个东西,一个web服务器,一个guacamole服务器部署在Linux上,一个vnc服务(guacamole支持不同的远程协议,rdp、vnc等,我只实现vnc)部署在远程主机上。要完成这么一个工程,需要各个方面的环境搭建,下面一一介绍。

安装环境:

我以centOS系统作为guacamole服务器的承载,工具使用secureCRT,通过SFTP传输文件。SFTP的基本命令如下:

  1. pwd 查看远程服务器当前目录;
  2. lpwd 查看本地系统的当前目录。
  3. cd <dir> 将远程服务器的当前目录更改为<dir>;
  4. lcd <dir> 将本地系统的当前目录更改为<dir>。
  5. ls 显示远程服务器上当前目录的文件名;
  6. ls -l 显示远程服务器上当前目录的文件详细列表;
  7. ls <pattern> 显示远程服务器上符合指定模式<pattern>的文件名;
  8. ls -l <pattern> 显示远程服务器上符合指定模式<pattern>的文件详细列表。
  9. lls 显示本地系统上当前目录的文件名;
  10. lls的其他参数与ls命令的类似。
  11. get <file> 下载指定文件<file>;
  12. get <pattern> 下载符合指定模式<pattern>的文件。
  13. put <file> 上传指定文件<file>;
  14. get <pattern> 上传符合指定模式<pattern>的文件。
  15. progress 切换是否显示文件传输进度。
  16. mkdir <dir> 在远程服务器上创建目录;
  17. lmkdir <dir> 在本地系统上创建目录。

三、安装jdk

部署guacamole需要jdk和tomcat,先下载jdk8,下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

将文件通过SFTP传入CentOS,tar -zvxf 命令解压,重命名为java8。然后,配置环境变量。

输入: sudo vim /etc/profile  编辑环境变量。

在/etc/profile文件末尾加入:

  1. export JAVA_HOME=java8的路径(可以进入java8目录使用命令“pwd”查看)
  2. export PATH=$JAVA_HOME/bin:$PATH 
  3. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 

编辑好之后,保存退出。输入:source /etc/profile 更新环境变量。

为了验证环境变量是否配置好,可以输入$JAVA_HOME 查看,如果显示出一行目录,则正常。

再验证jdk是否配置成功,输入:java -version 如果输入一下类似信息,则成功。

  1. java version "1.8.0_171"
  2. Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
  3. Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

四、安装tomcat

tomcat要8.0以上版本就行,下载地址:https://tomcat.apache.org/download-80.cgi

一样的方式,将tomcat传入了Linux,解压,命名为tomcat。编辑环境变量

  1. export CATALINA_HOME=/home/yue/tomcat
  2. 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。如果不在乎安全问题,可以直接关闭防火墙。

  1. iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口(即运行本机访问本机)
  2. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行
  3. iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问
  4. iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口
  5. iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许访问80端口
  6. iptables -A INPUT -p tcp --dport 21 -j ACCEPT #允许ftp服务的21端口
  7. iptables -A INPUT -p tcp --dport 20 -j ACCEPT #允许FTP服务的20端口
  8. iptables -A INPUT -j reject #禁止其他未允许的规则访问
  9. iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问

我这边是已经配置成功了:

五、安装必须的依赖库

前面提到,Guacamole分为两部分:提供guacd代理和相关库的 guacamole-server,以及为servlet容器(通常为Tomcat)提供客户端的guacamole-client。现在就先构建server。

guacamole-server 包含了guacamole连接到远程桌面的必要组件,这些组件需要依赖一些库。

guacd是guacamole-server的守护进程,接收来自web应用的隧道连接,然后代表guacamole连接到远程桌面。

安装必须的库,来自官方的整理,以下这些库都是必须安装的。

输入不同命令安装:

  1. sudo yum install cairo-devel
  2. sudo yum install libjpeg-turbo-devel  这个如果安装不了就使用 sudo yum install libjpeg-devel
  3. sudo yum install libpng-devel
  4. sudo yum install uuid-devel
  5. 另外还有两个必须安装的
  6. sudo yum install ffmpeg-devel
  7. sudo yum install libvncserver-devel

六、安装server

下一步,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目录下,执行以下命令:

  1. sudo .configure --with-init-dir=/etc/init.d
  2. sudo make
  3. sudo make install
  4. ldconfig  (更新系统已安装库的缓存)

执行:  guacd

弹出消息 guacd[23084]: INFO:     Guacamole proxy daemon (guacd) version 0.9.14 started  证明server安装成功了。

七、安装client

安装guacamole-client(即web服务器)

进入guacamole-client-0.9.14 执行:

mvn package

  1. $ mvn package
  2. [INFO] Scanning for projects...
  3. [INFO] ------------------------------------------------------------------------
  4. [INFO] Reactor Build Order:
  5. [INFO]
  6. [INFO] guacamole-common
  7. [INFO] guacamole-ext
  8. [INFO] guacamole-common-js
  9. [INFO] guacamole
  10. [INFO] guacamole-auth-jdbc
  11. [INFO] guacamole-auth-jdbc-base
  12. [INFO] guacamole-auth-jdbc-mysql
  13. [INFO] guacamole-auth-jdbc-postgresql
  14. [INFO] guacamole-auth-ldap
  15. [INFO] guacamole-auth-noauth
  16. [INFO] guacamole-client
  17. ...
  18. [INFO] ------------------------------------------------------------------------
  19. [INFO] Reactor Summary:
  20. [INFO]
  21. [INFO] guacamole-common ................................... SUCCESS [ 7.566 s]
  22. [INFO] guacamole-ext ...................................... SUCCESS [ 5.594 s]
  23. [INFO] guacamole-common-js ................................ SUCCESS [ 1.249 s]
  24. [INFO] guacamole .......................................... SUCCESS [ 8.474 s]
  25. [INFO] guacamole-auth-jdbc ................................ SUCCESS [ 0.592 s]
  26. [INFO] guacamole-auth-jdbc-base ........................... SUCCESS [ 2.548 s]
  27. [INFO] guacamole-auth-jdbc-mysql .......................... SUCCESS [ 2.557 s]
  28. [INFO] guacamole-auth-jdbc-postgresql ..................... SUCCESS [ 1.990 s]
  29. [INFO] guacamole-auth-ldap ................................ SUCCESS [ 1.314 s]
  30. [INFO] guacamole-auth-noauth .............................. SUCCESS [ 0.961 s]
  31. [INFO] guacamole-client ................................... SUCCESS [ 1.721 s]
  32. [INFO] ------------------------------------------------------------------------
  33. [INFO] BUILD SUCCESS
  34. [INFO] ------------------------------------------------------------------------
  35. [INFO] Total time: 34.701 s
  36. [INFO] Finished at: 2015-06-08T17:03:15-07:00
  37. [INFO] Final Memory: 34M/340M
  38. [INFO] ------------------------------------------------------------------------
  39. $

如果,你没有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的环境:

1、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

2、新建logback.xml

Guacamole使用称为Logback的日志系统来处理所有消息。默认情况下,Guacamole只会登录到控制台,但可以通过提供你自己的Logback配置文件来改变它。我们写成这样就好:guacamole运行时,会生成guacamole.log在当前目录,记录所有debug级别的日志。

  1. <configuration>
  2.  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
  3.   <file>/home/yue/guacamole/guacamole.log</file>
  4.    <encoder>
  5.      <pattern>%msg%n</pattern>
  6.    </encoder>
  7.  </appender>
  8.  <root level="debug">
  9.    <appender-ref ref="FILE" />
  10.  </root>
  11. </configuration>

3.新建user-mapping.xml  写入

  1. <user-mapping>
  2. <authorize username="test" password="test">
  3. <protocol>vnc</protocol>
  4. <param name="hostname">192.168.162.15</param>
  5. <param name="port">5900</param>
  6. </authorize>
  7. </user-mapping>

这里是说,新增一个vnc服务器,服务器地址为192.168.162.15,vnc所有端口为5900,guacamole连接这个vnc服务器的用户名和密码为test,test。接下来的操作,不用我说也知道,

如果想配置多个连接,就写多个authorize节点。

到此为止,GUACAMOLE_HOME的目录下现在一共有一下几个文件,

  1. guacamole-client-0.9.14
  2. guacamole-server-0.9.14
  3. guacamole.properties
  4. logback.xml
  5. user-mapping.xml

user-mapping.xml文件写入后,guacamole会自动去读取,等一会儿后,就能生效,不需要重启guacd或者tomcat。

不过,如果你以为这样就能完事的话,那就错了 ,因为还差最后一步,远程主机vnc服务器的搭建!

九、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。

 转载至链接:https://my.oschina.net/u/3490860/blog/1831706

转载原创文章请注明出处,转载至: 梁钟霖个人博客www.liangzl.com

Guacamole 远程桌面的更多相关文章

  1. Pi 在Windows下面使用远程桌面登录

    1.删除系统自带的xrdp 输入命令sudo apt-get purge xrdp pi@raspberrypi:~ $ sudo apt-get purge xrdp 正在读取软件包列表... 完成 ...

  2. 在web端使用html5访问远程桌面

    背景: 2019年12月5日,微软宣布放弃浏览器Edge,转而推出一款新的浏览器,而这款新浏览器将会采用谷歌的Chromium 内核... 好了,反正已经无力吐槽,微软烂尾的项目也不是一个两个了,之前 ...

  3. CentOS 6.8 安装TigerVNC 实现 Linux 远程桌面

    CentOS 6.8 有默认的安装的 vnc 位于端口 5900 : 系统->首选项->远程桌面 勾选[共享]的选项,  取消勾选[安全]的选项, 然后防火墙添加 5900 端口 基本就可 ...

  4. [No00008B]远程桌面发送“Ctrl+Alt+Delete”组合键调用任务管理器

    向远程桌面发送"Ctrl+Alt+Delete"组合键的两种方法 1.在本地按下Ctrl+Alt+End,可以成功发送"Ctrl+Alt+Delete"组合键! ...

  5. 远程桌面时plsql的复制粘贴功能失效

    解决办法:重新启动远程桌面上的rdpclip进程就可以复制粘贴了,但是每次重开远程桌面都会出现同样的问题.可以rdpclip这个设置成开机启动.

  6. QQ远程桌面的使用

    腾讯QQ怎样使用远程桌面: ---------------------- ----------------------

  7. [原创]用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题

    用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题,原因是终端服务器授权方式设置为了"每 ...

  8. 阿里云服务器上开启linux远程桌面连接

    一.说明: 本文的目的是实现在windows机器上利用远程桌面连接来访问远程的linux桌面. 这里使用的是阿里云服务器,操作系统为Centos6.5. 二.基本步骤: 1.首先保证服务器已经安装完毕 ...

  9. Windows远程桌面打印机映射

    计算机的打印机驱动能打印,需要满足两个条件,一个是有打印驱动本身,一个是要有连接好了的端口.这样,打印作业就会被打印驱动程序封装成一种打印机能识别的组织形式,然后通过打印端口发送给打印机,然后打印! ...

随机推荐

  1. 【LeetCode】回溯法 backtracking(共39题)

    [10]Regular Expression Matching [17]Letter Combinations of a Phone Number [22]Generate Parentheses ( ...

  2. java 发红包案例

  3. Uva10491 Cows and Cars 【迁移自洛谷博客】

    题目大意 假设有a头牛,b辆车(门的总数为a+b),你先选一个门,然后你最终选择前主持人会替你打开C扇有牛的门(不会打开你已经选择的门),问你要不要换门,输出"总是换门"的策略下, ...

  4. golang-练习2

    反转字符串 package main import "fmt" func FirstReverse(str string) string { var str1 []rune run ...

  5. JavaWeb(二):Servlet

    一.本教程使用的Web容器——Tomcat Tomcat是提供一个支持Servlet和JSP运行的容器.Servlet和JSP能根据实时需要,产生动态网页内容.而对于Web服务器来说, Apache仅 ...

  6. nyoj 253:LK的旅行 【旋转卡壳入门】

    题目链接 求平面最大点对. 找凸包 -> 根据凸包运用旋转卡壳算法求最大点对(套用kuang巨模板) 关于旋转卡壳算法 #include<bits/stdc++.h> using n ...

  7. 【leetcode】1021. Best Sightseeing Pair

    题目如下: Given an array A of positive integers, A[i]represents the value of the i-th sightseeing spot, ...

  8. ApplicationContext.xml模板

      <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www. ...

  9. vue cli3以上的项目中如何使用axois请求本地json文件

    首先明确一点,在vue cli3以上的版本中,存放静态资源的文件是public 我刚开始以为是和vue cli2一样需要放在static文件夹下,但是项目中没有这个文件夹,我就自己创建了一个,结果请求 ...

  10. 【QUIC】Quick UDP Internet Connections

    QUIC(Quick UDP Internet Connections,快速UDP互联网连接)是Google提出的一种基于UDP改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验. Q ...