前言:
因项目需要,经历多天查阅各种文档,几经波折终于功德圆满,写下此篇文章供大家分享。Guacamole就个人理解而言是一个可以通过web浏览器访问远程服务器终端进行操作的可视化工具。主要由web(浏览器)、Guacamole Server(核心)、Remote Desktops(远程桌面)三大模块组成。
简介:
Guacamole不是一个独立的Web应用程序,由许多部分组成。Web应用程序实际上旨在简单且最小化,大多数gruntwork由较低级别的组件执行。
用户使用其Web浏览器连接到Guacamole服务器。用JavaScript编写的Guacamole客户端由Guacamole服务器内的Web服务器提供给用户。加载后,此客户端使用Guacamole协议通过HTTP连接回服务器。
部署到Guacamole服务器的Web应用程序读取Guacamole协议并将其转发给guacd(本机Guacamole代理)。该代理实际上解释了Guacamole协议的内容,代表用户连接到任意数量的远程桌面服务器。
Guacamole协议与guacd结合提供了协议不可知性:Guacamole客户端和Web应用程序都不需要知道实际使用的远程桌面协议。
Guacamole协议
Web应用程序根本不了解任何远程桌面协议。它不包含对VNC或RDP或Guacamole堆栈支持的任何其他协议的支持。它实际上只了解Guacamole协议,这是一种用于远程显示渲染和事件传输的协议。虽然具有这些属性的协议自然具有与远程桌面协议相同的能力,但远程桌面协议和Guacamole协议背后的设计原则是不同的:Guacamole协议不旨在实现特定桌面环境的功能。
作为远程显示和交互协议,Guacamole实现了现有远程桌面协议的超集。因此,向Guacamole添加对特定远程桌面协议(如RDP)的支持涉及编写在远程桌面协议和Guacamole协议之间"翻译"的中间层。实现这样的转换与实现任何本机客户端没有什么不同,除了这个特定的实现呈现为远程显示而不是本地客户端。
处理此转换的中间层是guacd。
guacd
guacd是Guacamole的核心,它动态加载对远程桌面协议(称为"客户端插件")的支持,并根据从Web应用程序收到的指令将它们连接到远程桌面。
guacd是一个守护程序进程,它与Guacamole一起安装并在后台运行,侦听来自Web应用程序的TCP连接。guacd也不了解任何特定的远程桌面协议,而是实现了足够的Guacamole协议来确定需要加载哪些协议支持以及必须将哪些参数传递给它。加载客户端插件后,它将独立于guacd运行,并完全控制自身与Web应用程序之间的通信,直到客户端插件终止。
guacd和所有客户端插件依赖于一个公共库libguac,它使通过Guacamole协议的通信更容易,更抽象。
Web应用程序
用户实际与之交互的Guacamole部分是Web应用程序。
如前所述,Web应用程序不实现任何远程桌面协议。它依赖于guacd,并且只实现一个漂亮的Web界面和身份验证层。
我们选择用Java实现Web应用程序的服务器端,但是没有理由不能用不同的语言编写它。事实上,因为Guacamole是一个API,我们鼓励这样做。
RealMint
Guacamole现在是一个通用的远程桌面网关,但情况并非总是如此。Guacamole 最初是一个用JavaScript编写的纯文本Telnet客户端,名为 RealMint("RealMint"是"终端"的字谜)。它主要是作为一个演示而写的,虽然它的目的是有用,但它的主要声誉只是它是纯粹的JavaScript。
RealMint使用的隧道是用PHP编写的。与Guacamole的HTTP隧道相比,RealMint的隧道仅使用简单的长轮询并且效率低下。RealMint有一个不错的键盘实现,它现在存在于Guacamole键盘代码的部分内容中,但这实际上是RealMint功能和可用性的范围。
鉴于它只是遗留协议的一个实现,并且存在其他几个JavaScript终端仿真器,其中大多数已经完善且稳定,该项目被删除。
VNC客户端
一旦开发人员了解了HTML5 canvas标签,并发现它已经在Firefox和Chrome中实现,那么工作就开始于概念验证JavaScript VNC客户端了。
该客户端纯粹是带有Java服务器组件的JavaScript,并通过将VNC转换为基于XML的版本来工作。它的开发自然是由VNC的功能驱动的,其范围仅限于将单个连接转发给一组用户。虽然相对较慢,但概念验证工作得很好,项目需要一个在线居住的地方,并在SourceForge注册为"Guacamole" - 一个HTML5 VNC客户端。
随着Guacamole的发展并不仅仅是概念验证,对速度的需求也在增加,旧的RealMint风格的长轮询被删除了,就像使用XML一样。
由于当时无法信任WebSocket,并且Java没有针对servlet的WebSocket标准,因此开发了一个等效的基于HTTP的隧道。如果WebSocket因任何原因无法使用,今天仍会使用此隧道。
远程桌面网关
开发了一种更快的基于文本的协议,它可以呈现多个远程桌面协议的功能,而不仅仅是VNC。整个系统被重新架构为一个标准守护进程,guacd和一个公共库libguac,它驱动了守护进程和协议支持,后者变得可扩展。
该项目的范围从适当的VNC客户端扩展到高性能的HTML5远程桌面网关和通用API。在当前状态下,Guacamole可用作访问运行不同远程桌面服务器的任意数量计算机的中央网关。它提供可扩展的身份验证,如果您需要更专业的内容,则可以使用基于HTML5的远程访问的通用API。
部署:
系统环境:
CentOS7 + Tomcat8 + JDK1.8 + guacamole-server0.9.14
安装JDK:
执行命令:
yum install -y java-1.8.0-openjdk-devel.x86\_64
查看是否安装成功:
java -version
安装Tomcat:
下载 :https://tomcat.apache.org/download-80.cgi#8.0.53
解压:
tar -xzvf apache-tomcat-8.0.53.tar.gz
配置tomcat以service方式启动:
cd /etc/init.d/
vi tomcat
tomcat文本内容:
#!/bin/bash
# description: Tomcat Start Stop Restart
# processname: tomcat8
# chkconfig: 234 20 80
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CATALINA_HOME=/usr/local/tomcat/apache-tomcat-8.0.53
case $1 in
start)
sh $CATALINA_HOME/bin/startup.sh
;;
stop)
sh $CATALINA_HOME/bin/shutdown.sh
;;
restart)
sh $CATALINA_HOME/bin/shutdown.sh
sh $CATALINA_HOME/bin/startup.sh
;;
esac
exit 0
配置完成后可通过service tomcat start 命令启动
安装Guacamole-Server
安装环境:
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86\_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
yum update -y
安装依赖:
yum -y install cairo-devel libjpeg-devel libpng-devel uuid-devel
yum -y install ffmpeg-devel freerdp-devel pango-devel libssh2-devel
yum -y install libtelnet-devel libvncserver-devel pulseaudio-libs-devel
yum -y install openssl-devel libvorbis-devel libwebp-devel
yum -y install freerdp-plugins
安装包下载:https://guacamole.apache.org/releases/0.9.14/
解压并安装:
tar -xzvf guacamole-server-0.9.14.tar.gz
cd /guacamole-server-0.9.14/
./configure --with-init-dir=/etc/init.d
make && make install
启动服务:
service guacd start
安装Guacamole-client
mv ./guacamole.war /usr/local/tomcat/apache-tomcat-8.0.53/webapps
重新启动tomcat:
service tomcat start
配置:
创建/etc/guacamole/文件目录:
mkdir /etc/guacamole/
创建guacamole.properties文件:
cd /etc/guacamole/
vi guacamole.properties
guacamole.properties文本内容:
# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port: 4822
enable-websocket: true
enable-clipboard-integration: true
# auth-provider: net.sourceforge.guacamole.net.auth.noauth.NoAuthenticationProvider
# noauth-config: /etc/guacamole/noauth-config.xml
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
basic-user-mapping: /etc/guacamole/user-mapping.xml
在/etc/guacamole/目录下创建user-mapping.xml文件:
vi user-mapping.xml
user-mapping.xml文本内容:
rdp
119.XXXX.121.XXXX
3389
XXXX
XXXXXX
rdp
192.XXXX.41.XXXX
3389
XXXXX
XXXXX
ssh
192.XXXX.41.XXXX
22
XXXXX
XXXXX
true
192.XXXX.41.XXXX
/data/sftp
XXXXX
XXXXX
ssh
192.XXXX.41.XXXX
22
XXXXX
XXXXX
true
192.XXXX.41.XXXX
/data/sftp
XXXXX
XXXXX
重新启动服务: service guacd restart
访问: http://localhost:8080/guacamole/#/
登录输入:账号admin密码123456