Guacamole
一 简介
Apache Guacamole 是基于浏览器的远程桌面访问的解决方案。它支持VNC,RDP,SSH等标准协议。guacamole的客户端是html5 web应用程序,通过访问浏览器,就可以访问到远程桌面。目前经常使用的Microsoft的mstsc,或者VNC,又或者teamviewer,这些都是基于C/S架构的远程桌面连接组件,而guacamole却做到了基于B/S的远程桌面连接。
二 架构
2.1 协议(guacamole)
为了实现对多种远程桌面协议的集成,guacamole实现了一个远程显示和交互的私有协议。
协议包含:握手,绘图,事件,断连等一系列规范。Web应用程序只需要使用Guacamole protocal协议,就可以完成连接的建立,事件消息的传输接收,连接的拆除工作。
2.2 Web应用程序
Guacamole中与用户交互的是Web应用程序。 Web应用程序自己不实现任何的远程桌面协议。它根据Guacamole protocal的内容实现界面展示以及权限认证。原生Web应用程序用Java以及java script语言编写。也可以用其他语言实现web 应用,例如基于python实现的guacamole-django-client。
2.3 guacd 代理服务程序
guacd是Guacamole的“心脏”,它代表客户端执行远程桌面协议,并将远程桌面协议包含的数据转化为Guacamole protocal用于和客户端的交互。 guacd采用插件的方式动态支持远程桌面协议。具体流程是,Web应用程序发来连接远程桌面指令。guacd根据接收到的指令内容,决定加载那个远程协议插件并且传送特定的参数给插件。(远程协议插件就是用来解析具体远程桌面协议的, 完成远程桌面连接功能)一旦插件被加载,插件就独立于guacd运行,对Web应用程序和自己之间的会话(conmunication)具有绝对的控制权,直到插件被关闭。
三 环境搭建
3.1 tomcat安装
- 1.安装jdk依赖
yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
- 2.下载安装tomcat 服务器
Wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.37/bin/apache-tomcat-9.0.37.tar.gz
tar xvf apache-tomcat-9.0.37.tar.gz -C /usr/local/
mv /usr/local/apache-tomcat-9.0.37/ /usr/local/tomcat/
3.2 guacamole server编译安装
- 1 安装依赖
yum install -y cairo-devel libjpeg-turbo-devel libpng-devel uuid-devel freerdp-devel pango-devel libssh2-devel libvncserver-devel pulseaudio-libs-devel openssl-devel libvorbis-devel libwebp-devel
- 2 下载guacamole server并编译安装
wget https://mirrors.tuna.tsinghua.edu.cn/apache/guacamole/1.2.0/source/guacamole-server-1.2.0.tar.gz
tar xvf guacamole-server-1.2.0.tar.gz -C /usr/local/
mv /usr/local/guacamole-server-1.2.0/ /usr/local/guacamole
cd /usr/local/guacamole
./configure --with-init-dir=/etc/init.d
make && make install
3.3 guacamole client安装
- 1 下载guacamole client war包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/guacamole/1.2.0/binary/guacamole-1.2.0.war
- 2 部署guacamole到tomcat
cp -f guacamole-1.2.0.war /usr/local/tomcat/webapps/guacamole.war
3.4 guacamole配置
- 1 创建guacamole配置目录
mdkir /etc/guacamole
mdkir /etc/guacamole/{lib,extensions}
- 2 创建guacamole.properties文件
vi /etc/guacamole/guacamole.properties
输入
guacd-hostname:localhost
guacd-port: 4822
user-mapping: /etc/guacamole/user-mapping.xml
- 3 创建logback.xml文件
vi /etc/guacamole/logback.xml
输入
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>/opt/guacamole/guacamole.log</file>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration>
- 4 创建user-mapping.xml文件
vi /etc/guacamole/user-mapping.xml
输入
<user-mapping>
<!-- 登陆账号密码 -->
<authorize username="admin" password="admin">
<connection name="linux-rdp">
<protocol>rdp</protocol>
<param name="hostname">192.168.9.191</param>
<param name="port">3389</param>
<param name="username">root</param>
<param name="password">12345678</param>
</connection>
<connection name="linux_cmd">
<protocol>ssh</protocol>
<param name="hostname">192.168.9.222</param>
<param name="port">22</param>
<param name="username">root</param>
<param name="password">12345678</param>
</connection>
<connection name="linux_vnc">
<protocol>vnc</protocol>
<param name="hostname">192.168.9.191</param>
<param name="port">5901</param>
<param name="username">root</param>
<param name="password">12345678</param>
</connection>
<connection name="linux_win">
<protocol>rdp</protocol>
<param name="hostname">192.168.4.181</param>
<param name="port">1</param>
<param name="username">shy</param>
<param name="password">1</param>
</connection>
</authorize>
</user-mapping>
3.5 启动服务
/usr/local/tomcat/bin/startup.sh restart
service guacd restart