简介

Guacamole是一个提供远程桌面解决方案的开源项目,通过浏览器就能操作虚拟机,适用于Chrome、Firefox、IE9+等浏览器(浏览器需要支持HTML5)。只要在一个服务器成功安装Guancamole,就可以通过访问一个web浏览器去操作我们配置好的虚拟机。当然,作为一个开源的项目,我们可以对Guacamole做相应的定制修改,使其适配我们的项目需求,比如做成自动登录的,加上项目权限验证等。


Guacamole一基于HTML5的远程桌面控制框架,性能较高,官方说接近于原生的VNC,Guacamole不是一个独立的Web应用程序,而是由许多部件组成的。Web应用程序实际上是整个项目里最小最轻量的,大部分的功能依靠Guacamole的底层组件来完成


Guacamole程序的流程简述如下:用户通过浏览器连接到Guacamole的服务端,Guacamole的客户端是用javascript编写的,Guacamole Server通过Web容器(比如Tomcat)把服务提供给用户。一旦加载,客户端通过http承载着Guacamole自己的定义的协议与服务端通信。部署在Guacamole Server这边的Web应用程序,解析到的Guacamole protocal,就传给Guacamole的代理guacd,这个代理(guacd)实际上就是解析Guacamole protocal,替用户连接到远程机器,Guacamole protocal协议本身以及guacd的存在,实现了协议的透明:Guacamole客户端(浏览器运行的JS)和Web应用程序,都不需要知道远程桌面具体用哪个协议(VNC,RDP etc),分为4个大的部分:

  • JS (WebSocket/xmlhttprequest + canvas),普通的用户看到的部分,使用的HTML5与后台进行交互;

  • JavaServlet:处理与用户的交互,将页面上的操作请求处理下,再直接与下层的guacd来交互;

  • guacd, 底层的daemon,封装了各种RDP协议的中间层,如VNC等;

  • libfreerdp,libssh等,各种通信协议,会被封装成Guacamole的协议;

而关于Guacamole的协议 ,JS与JavaServlet,Servlet与guacd交互,都是采用这种格式。

部署环境和优势

  • Guacamole完全基于浏览器,不必安装JRE、RDP、VNV等客户端插件,不需要考虑客户的机器环境;

  • Guacamole可以通过一台授权机器管理多台服务器,免于多个管理端登录;

  • Guacamole可以穿透防火墙,通过一台服务器管理内容的其它不对外提供网络服务的设备;

  • 在云项目中,我们可以通过数据库或者XML文件,配置KVM虚拟机的端口,直接通过网页管理虚拟机,无需再次验证,直接登录;

  • Guacamole基于HTML5的远程桌面控制框架,性能较高,官方说接近于原生的VNC,对于一些临时性管理和查看任务足够了;

安装环境说明

操作系统:Rocky Linux 9
JDK:JDK8
Tomcat:Tomcat7
Guacamole服务器:guacamole-server-1.5.0.tar.gz
Guacamole客户端:guacamole-1.5.0.war

安装JDK和Tomcat

JDK和Tomcat的安装过程,这里不再赘述。

安装guacamole服务器

1.安装依赖包

#一些支持VNC  DRP  SSH的必要工具
dnf -y install --enablerepo=devel cairo cairo-devel  libpng libpng-devel  freerdp freerdp-devel  pango pango-devel libssh2 libssh2-devel libtelnet libtelnet-devel libvncserver libvncserver-devel pulseaudio pulseaudio-libs pulseaudio-libs-devel openssl openssl-devel  libvorbis libvorbis-devel  uuid uuid-devel   libwebp libwebp-devel libwebsockets libwebsockets-devel libjpeg-devel  
#安装ffmpeg包
dnf install -y https://mirrors.ustc.edu.cn/rpmfusion/free/el/rpmfusion-free-release-9.noarch.rpm https://mirrors.ustc.edu.cn/rpmfusion/nonfree/el/rpmfusion-nonfree-release-9.noarch.rpm
#安装ffmpeg
dnf -y install --enablerepo=devel ffmpeg-devel

2.编译安装guacamole_server源码包

接下来编译下载好的guacamole-server-1.5.0.tar.gz源码包,执行如下命令:

# 解压源码包
tar -xvzf guacamole-server-1.5.0.tar.gz

# 进入到解压目录下
cd guacamole-server-1.5.0/

# 执行configure进行脚本配置
./configure

# 编译guacamole_server源码 这一步可能会失败报错,guacenc avcodec_find_encoder_by_name相关,报错看下一步
make  

# 安装创建完的组件
make install

# 更新已安装库的系统缓存
ldconfig

注意:报错处理 

  原因:编译代码时未处理该错误,已经在GITHUB处理,但是未加入1.5.0的包中

  方案:

#打开链接https://github.com/apache/guacamole-server/pull/399/files
按照列表中修改三个文件的对应位置
因为ffmpeg api的变更,需要增加 const 修饰符
#按照示例修改三个文件(共计6处)即可编译成功

3.配置guacamole服务:

新建/app/guacd目录,存放所有相关配置

/app/guacd下创建extensions和lib目录

lib中存放mysql驱动jar

extensions下存放以下文件

文件可以在https://guacamole.apache.org/releases/ 这里的对应版本中找到

guacamole-auth-jdbc-mysql-1.5.0.jar  
guacamole-auth-quickconnect-1.5.0.jar

配置启动文件

/etc/systemd/system/vnc.service

[Unit]
Description=Guacamole Server
Documentation=man:guacd(8)
After=network.target

[Service]
User=root
ExecStart=/usr/local/sbin/guacd -f
Restart=on-abnormal

[Install]
WantedBy=multi-user.target
# 启动guacd服务并设置为开启自启动
systemctl enable --now vnc

安装Guacamole客户端

1.首先新建配置文件:

#guacamole.properties文件
mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacd
mysql-username: root
mysql-password: root
mysql-user-password-min-length: 8
mysql-user-password-require-multiple-case: true
mysql-user-password-require-symbol: true
mysql-user-password-require-digit: true
mysql-user-password-prohibit-username: true
#mysql-user-password-min-age: 7
#mysql-user-password-max-age: 90
mysql-user-password-history-size: 6
mysql-default-max-connections: 1
mysql-default-max-group-connections: 1
mysql-default-max-connections-per-user: 0
mysql-default-max-group-connections-per-user: 0
mysql-absolute-max-connections: 0
mysql-user-required: true
ln -s /app/guacd /etc/guacamole

最后将war文件放入tomcat启动即可

注意:mysql的脚本同样可以在https://guacamole.apache.org/releases/ 这里的对应版本中找到