前言:
因项目需要,经历多天查阅各种文档,几经波折终于功德圆满,写下此篇文章供大家分享。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 + Tomcat9 + JDK1.8 + guacamole-server1.1.0
1、安装系统开发环境
# 配置源
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 groupinstall "Development Tools"
yum install -y java-1.8.0-openjdk-devel.x86\_64
2、安装wget等工具
yum install wget -y
yum install make -y
yum install gcc -y
yum install gcc-c++ -y
3 、安装依赖包
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
cd /root
wget https://mirrors.tuna.tsinghua.edu.cn/apache/guacamole/1.1.0/source/guacamole-server-1.1.0.tar.gz
tar -zxvf guacamole-server-1.1.0.tar.gz
cd guacamole-server-1.1.0
./configure --with-init-dir=/etc/init.d
make && make install
ldconfig
#允许随系统启动
systemctl enable guacd
#开启服务
systemctl start guacd
#查看服务进程
systemctl status guacd
配置:
1、创建/etc/guacamole/文件目录
mkdir /etc/guacamole/
2、创建guacamole.properties文件
cd /etc/guacamole/
vim 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
3、在/etc/guacamole/目录下创建user-mapping.xml文件:
vim user-mapping.xml
rdp
192.168.1.xxx
3389
xx
xxx
true
nla
rdp
192.168.75.xxx
3389
xxx
xxx
true
nla
ssh
192.168.1.xxx
22
xxx
xxxx
true
192.168.1.xxx
/data/sftp
xxx
xxx
cd /root
wget https://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz
tar -zxvf apache-tomcat-9.0.35.tar.gz
mv apache-tomcat-9.0.35 tomcat
cp -r tomcat /usr/local/
1、配置 systemctl 文件
vim /lib/systemd/system/tomcat.service
[Unit]
Description=tomcat
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
ExecReload=/bin/kill -s HUP $MAINPID
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
授予适当的权限
chmod 754 /lib/systemd/system/tomcat.service
#启动服务
systemctl start tomcat.service
#关闭服务
systemctl stop tomcat.service
#开机启动
systemctl enable tomcat.service
安装 guacamole客户端
cd /root
wget https://mirror.bit.edu.cn/apache/guacamole/1.1.0/binary/guacamole-1.1.0.war
mv guacamole-1.1.0.war guacamole.war
cp guacamole.war /usr/local/tomcat/webapps/
systemctl start tomcat.service
systemctl start firewalld
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
访问: http://IP:8080/guacamole/#/
如有错误,请批评指正。