简介:guacamole是apache开源的一款连接远程机器(类似window机器的mstsc工具以及linux的 xfreerdp远程工具)的web应用。
官网:http://guacamole.apache.org/
一、介绍
1、先看看官网提供的架构图
- 其中guacamole将架构图中 HTML5(JavaScript编写)以及guacamole server中的guacamole(Java编写)部分打成了一个war包,称之为guacamole-client,部署在tomcat等容器中。
- guacamole server中的guacd(C编写) 称之为guacamole-server,提供了代理和相关的依赖库。
- 最终由 guacd 部分通过rdp、vnc等协议(利用依赖库)连接到远程的机器。
2、介绍:guacamole是一个开源的用于连接远程桌面(支持RDP、SSH、VNC等协议) 的Web应用程序,可以实现对远程桌面的访问。用户可以不用安装客户端,而直接通过浏览器访问到不受限制的远程机器。
3、连接流程:用户发起对远程桌面的连接时,浏览器会通过建立在http协议基础上的guacamole协议与web容器中的guacamole部分建立连接,然后将桌面的登录数据发送给后端。web容器中的guacamole获取到前端发送的请求后转发给guacd(本地Guacamole代理),由guacd根据获取的数据进行相应协议的连接。之后浏览器发起的桌面操作也都是先发送给web后端,再由后端转发给guacd,guacd再实际去操作对应的桌面进行鼠标/键盘等控制。
4、guacd:guacd是guacamole实现远程连接的核心,是一个安装在guacamole后台运行的守护进程。
二、guacamole服务端(guacd)部署
服务端为 guacamole-server,为c语言编写的服务。 下面讲两种部署方式:
命令部署方式:
1、编译 guacamole-server 需要安装如下依赖:
sudo yum install cairo-devel libjpeg-turbo-devel libpng-devel libtool uuid-devel
2、安装可选依赖,根据要求安装
(1)提供视频转换功能: sudo yum install ffmpeg-devel
(2)rdp支持,RDP支持需要FreeRDP 2.0.0或更高版:sudo yum install freerdp-devel
(3)基于终端 ssh、telnet的支持:sudo yum install pango-devel
(4)构建ssh的支持:sudo yum install libssh2-devel
(5)构建telnet支持:sudo yum install libtelnet-devel
(6)构建vnc支持:sudo yum install libvncserver-devel
(7)构建Kubernetes支持: sudo yum install libwebsockets-devel
(8)VNC的实验性音频支持:sudo yum install pulseaudio-libs-devel
(9)加密的支持:sudo yum install openssl-devel
(10)对声音进行压缩:sudo yum install libvorbis-devel
3、下载最新guacd服务包
地址:http://guacamole.apache.org/releases/1.1.0/
包:guacamole-server-1.1.0.tar.gz
4、解压
tar -xzf guacamole-server-1.1.0.tar.gz
5、进入目录
cd guacamole-server-1.1.0/
6、运行configure之后,您可以看到找到了哪些库,以及应该构建哪些库的列表,-with init dir=/etc/init.d将guacd的启动脚本安装到/etc/init.d目录中,命令如下:
sudo ./configure --with-init-dir=/etc/init.d
7、编译安装:
sudo make && make install
8、更新系统中已安装库的缓存:
ldconfig
9、启动guacd服务
sudo /etc/init.d/guacd start
10、修改服务配置(guacamole默认的配置文件目录为 /etc/guacamole)
根据上面启动后,默认服务端口为 4822, 可以通过 netstat -antl | grep 4822 命令查看主机对该端口进行了监听
可以通过下面方式修改配置:
创建配置文件: /etc/guacamole/guacd.conf,内容如下:
[daemon]
pid_file = /var/run/guacd.pid
log_level = info
[server]
bind_host = 127.0.0.1
bind_port = 4821 #对应服务启动端口号
这个时候重启服务,监听的端口改为 4821
11、配置文件存放路径设置
默认guacamole配置文件存放路径为 /etc/guacamole,我们也可以设置哪些路径的文件作为我们的配置文件:
- 通过设置系统的 GUACAMOLE_HOME 变量,定义一个存放配置文件的路径
- 启动程序的用户目录下的 .guacamole 目录下定义的配置文件也会被读
- 系统的 guacamole.home 属性对应的路径下的配置文件
12、其他配置文件讲解
在配置文件目录下,我们还可以定义其他配置文件:
(1)logback.xml(日志文件的设置,Guacamole使用Logabck来记录日志, 默认记录到console, 也可以指定自己的Logback配置文件):
<configuration>
<!-- Appender for debugging -->
<appender name="GUAC-DEBUG" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 定义日志级别 -->
<root level="debug">
<appender-ref ref="GUAC-DEBUG"/>
</root>
</configuration>
(2)extensions/ 目录
会在对应的配置文件存放目录的 extensions 目录下存放Guacamole的插件, 启动时默认会加载所有以 .jar结尾的文件
(3)lib/
会在对应的配置文件存放目录的 lib 目录下存放Guacamole插件所需要的依赖, 目录下的.jar文件需要对所有插件可读
docker部署方式:
1、pull镜像:docker pull guacamole/guacd
2、启动镜像(映射本地端口4822):docker run --name my-guacd -d -p 4822:4822 guacamole/guacd
3、另外可以在启动镜像的时候带参数,如下:
定义guacd的日志级别:docker run -e GUACD_LOG_LEVEL=debug -d guacamole/guacd
使用本地的网络:docker run --name my-guacd --network host guacamole/guacd
三、guacamole客户端部署
1、命令部署方式:
(1)获取最新war包
官网地址: http://guacamole.apache.org/releases/1.1.0/
对应的压缩包:guacamole-client-1.1.0.tar.gz
通过tar命令解压获取到一个war包(或者直接源码打包获取):guacamole-1.1.0.war
(2)在配置文件定义目录下,如/etc/guacamole 下,创建配置文件guacamole.properties,该配置文件指定guacamole-client连接哪个机器的guacd以及对应的端口等信息:
# Hostname and port of guacamole proxy
#Guacamole代理的监听地址, 默认localhost
guacd-hostname: localhost
#Guacamole代理的监听端口, 默认4822
guacd-port: 4821
#Guacamole会话的空连接时间,单位:分钟; 默认:60
#api-session-timeout:
(3)将war包部署到tomcat,启动即可
2、docker部署方式:
(1)pull镜像:docker pull guacamole/guacamole
(2)启动镜像(注意依赖于服务端的 my-guacd):
docker run --name my-guacamole --link my-guacd -d -p 8080:8080 guacamole/guacamole
(3)如果guacd不是通过docker部署的,则启动的时候需要设置guacd的配置:
docker run --name my-guacamole -e GUACD_HOSTNAME=127.0.0.1 -e GUACD_PORT=4822 -d -p 8080:8080 guacamole/guacamole
四、访问
(1)部署完 guacamole-server 和 guacamole-client 后,可以通过浏览器访问,我们启动了8080端口,直接浏览器:
http://127.0.0.1:8080 ,但是这个时候没有任何桌面以及用户信息
(2)在 /etc/guacamole 目录下创建配置文件 user-mapping.xml,内容如下:
<user-mapping>
<!-- 登陆账号密码 -->
<authorize username="admin" password="123">
<!-- 定义一个通过rdp协议登录的window桌面 -->
<connection name="windows">
<protocol>rdp</protocol>
<param name="hostname">192.168.1.1</param>
<param name="port">3389</param>
<!-- 桌面用户名密码 -->
<param name="username">user</param>
<param name="password">password</param>
<!-- 大小自动变化 -->
<param name="resize-method">display-update</param>
<!-- 分辨率 -->
<param name="dpi">100</param>
<param name="console">true</param>
<param name="disable-audio">true</param>
<param name="enable-drive">true</param>
<param name="drive-path">/usr/guacamole/upload/</param>
<param name="create-drive-path">true</param>
<param name="ignore-cert">true</param>
</connection>
<!-- 定义一个通过ssh协议登录的centos桌面 -->
<connection name="centos ssh">
<protocol>ssh</protocol>
<param name="hostname">192.168.1.2</param>
<param name="port">22</param>
</connection>
<!-- 定义一个通过vnc协议登录的桌面 -->
<connection name="vnc">
<protocol>vnc</protocol>
<param name="hostname">vncdesktop</param>
<param name="port">3244</param>
<param name="password">VNCPASS</param>
</connection>
</authorize>
</user-mapping>
这个时候访问浏览器, 输入账号: admin, 密码:123 进行登录。 登录成功后选择对应名称的桌面即可进行相应的登录。
(3)另外可以依赖mysql数据库,将桌面等信息存放到mysql,并支持实时添加桌面进行连接