部署Guacamole跳板机平台

举报
Ragnar 发表于 2020/07/27 20:13:28 2020/07/27
【摘要】 部署Guacamole跳板机平台Apache Guacamole是一个可以通过浏览器访问远程桌面的应用,它无需在访问者界面部署任何软件(clientless),且支持主流的VNC,RDP,SSH等协议。本文主要介绍如何通过华为云stack部署一个Guacamole平台,支持云外的用户进行远程访问。部署和架构Guacamole不是一个完全独立的(self-contained)网络应用,它由一个...

部署Guacamole跳板机平台

Apache Guacamole是一个可以通过浏览器访问远程桌面的应用,它无需在访问者界面部署任何软件(clientless),且支持主流的VNC,RDP,SSH等协议。本文主要介绍如何通过华为云stack部署一个Guacamole平台,支持云外的用户进行远程访问。

部署和架构

Guacamole不是一个完全独立的(self-contained)网络应用,它由一个简单轻量的网络应用搭配主要的底层组件构成的。


当用户通过浏览器连接一个Guacamole服务器时,Guacamole client组件通过内置于Guacamole 服务器的webserver提供给用户(servered to users by a webserver within the Guacamole server)。继而这个client使用Guacamole协议通过HTTP连接回Guacamole服务器。

部署着Guacamole server的网络应用(e.g. apache nginx)读取Guacamole 协议并转发给Guacamole原生代理guacd。 这个代理解析请求并代表用户访问远程桌面服务。

Guacamole协议结合guacd服务共同保证了:无论是Guacamole client还是网络应用都无需感知远程桌面的传输协议。

Guacamole协议

网络应用并不明白任何的远程桌面协议,它只需要理解Guacmole协议。这个协议支持远程显示的渲染和事件的传输工作。

作为一个远程展示和交互的协议,Guacmole整合了当前很多的远程桌面协议。向Guacmole添加一个远程桌面协议可以理解为在远程桌面协议(如RDP)和Guacmole协议直接写入一个中介传输层。操作这个中间层和直接操作本地服务并无太大区别。

这个中介层就是guacd

guacd

guacd是Guacamole的核心,它动态的载入对远程桌面协议的支持,并且接受网络应用的指示连接远程桌面。

guacd是一个守护进程,它与Guacmole一起安装并在后台运行并监听网络应用的TCP连接请求。guacd同样不理解具体的远程桌面协议,但是它通过Guacamole协议知道需要调用并且加载相应的协议插件,当客户端插件(client plugin)被加载,它就可以独立于guacd运行并拥有全部的控制权限直到被关闭。

guacd以及所有的客户端插件都依赖于一个公共包libguac,它使得通过Guacamole协议的交流更加的普适化(abstract)。

网络应用

在Guacamole中,用户直接进行交互的部分是网络应用。它依赖于guacd且仅仅提供认证和网络转发等。

安装Guacamole

Guacamole主要分为2个部分:

  • guacamole-server提供guacd代理以及相关的依赖。

  • guacamole-client提供servlent容器(通常为Tomcat)需要的client。

安装guacamole-server

guacamole-server包含所有Guacamole所需的原生的,服务器端的组件。libguac是其中一个公共的C包,它包含了所有基础组件的依赖。

安装guacd会创建一个guacd的守护进程,一般推荐设置为开机自动启动。

在安装之前确保预装了C编译器(e.g. gcc)。

这里我们以CentOS7.6来安装部署一个Guacmole服务。

安装依赖

a. 必选依赖

依赖包名称 说明
Cairo Cairo是用语图形化渲染的
libjpeg-turbo 提供JPEG支持
libpng libguac依赖它来写PNG图片
libtool 安装过程中创建编译包
OSSP UUID 生成UUID
yum install -y cairo-devel libjpeg-turbo-devel libpng-devel libtool  uuid-devel

b. 可选依赖

主要是远程桌面协议的一些依赖包

Library name Features
FFmpeg 操作录屏等功能依赖这个包,如果不需要可以跳过
FreeRDP 支持RDP连接,一般这个必选
Pango 支持文字布局的包,SSH, telnet,kubernetes必选
libssh2 支持SSH连接
libtelnet 支持telnet连接
libVNCServer 支持VNC连接
libwebsockets 支持kubernetes必选
PulseAudio VNC的语音支持,对于云上服务器非必要
OpenSSL ssh,kubernetes必选,加密guacd的通信,支撑ssh的密钥管理
libvorbis 支持音频
libwebp 支持WebP,处理图像的扩展
yum install -y ffmpeg-devel freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel libwebsockets-devel pulseaudio-libs-devel openssl-devel libvorbis-devel libwebp-devel
# 有些linux版本可能没有相应的包,可以选择跳过

下载源代码

安装Guacamole-server

官网下载1.1.0或以上版本。解压

$ tar -xzf guacamole-server-1.2.0.tar.gz
$ cd guacamole-server-1.2.0/
$ ./configure --with-init-dir=/etc/init.d
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
...

------------------------------------------------
guacamole-server version 1.2.0
------------------------------------------------

  Library status:

    freerdp2 ............ yes
    pango ............... yes
    libavcodec .......... yes
    libavformat ......... yes
    libavutil ........... yes
    libssh2 ............. yes
    libssl .............. yes
    libswscale .......... yes
    libtelnet ........... yes
    libVNCServer ........ yes
    libvorbis ........... yes
    libpulse ............ yes
    libwebsockets ....... yes
    libwebp ............. yes
    wsock32 ............. no

  Protocol support:

     Kubernetes .... yes
     RDP ........... yes
     SSH ........... yes
     Telnet ........ yes
     VNC ........... yes

  Services / tools:

     guacd ...... yes
     guacenc .... yes
     guaclog .... yes

  Init scripts: /etc/init.d
  Systemd units: no

Type "make" to compile guacamole-server.
$ make  # 使用make进行编译
Making all in src/libguac
make[1]: Entering directory `/home/zhz/guacamole/guacamole-server/src/libguac'
...
make[1]: Leaving directory `/home/zhz/guacamole/guacamole-server/src/protocols/vnc'
make[1]: Entering directory `/home/zhz/guacamole/guacamole-server'
make[1]: Nothing to be done for `all-am'.
make[1]: Leaving directory `/home/zhz/guacamole/guacamole-server'
$ make install   # 安装
Making install in src/libguac
make[1]: Entering directory `/home/zhz/guacamole/guacamole-server/src/libguac'
make[2]: Entering directory `/home/zhz/guacamole/guacamole-server/src/libguac'
...
----------------------------------------------------------------------
Libraries have been installed in:
  /usr/local/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
  - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
    during execution
  - add LIBDIR to the `LD_RUN_PATH' environment variable
    during linking
  - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
  - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/home/zhz/guacamole/guacamole-server/src/protocols/vnc'
make[1]: Leaving directory `/home/zhz/guacamole/guacamole-server/src/protocols/vnc'
make[1]: Entering directory `/home/zhz/guacamole/guacamole-server'
make[2]: Entering directory `/home/zhz/guacamole/guacamole-server'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/home/zhz/guacamole/guacamole-server'
make[1]: Leaving directory `/home/zhz/guacamole/guacamole-server'
$ ldconfig # 更新系统缓存

到此安装结束,但是guacd还没有运行,我们需要在Guacamole client安装后运行guacd。

部署Guacamole

直接从官网下载guacamole.war包,将war包拷贝到/var/lib/tomcat/webapps, 并重启guacd和tomcat服务。

# cp guacamole/target/guacamole-1.2.0.war /var/lib/tomcat/webapps/guacamole.war
#
# /etc/init.d/tomcat7 restart
Stopping Tomcat... OK
Starting Tomcat... OK
# /etc/init.d/guacd start
Starting guacd: SUCCESS
guacd[6229]: INFO:  Guacamole proxy daemon (guacd) version 1.2.0 started

Guacamole配置

Guacamole服务的位置(GUACAMOLE_HOME)一般在/etc/guacamole下,这里包含了所有的配置文件和扩展包。

  • guacamole.properties

    主要的Guacamole服务的配置文件,有关Guacamole服务认证、连接等的配置都在这个文件定义。

  • logback.xml

    日志配置,可以选择日志等级。

  • extensions/

    放置Guacamole扩展.jar包的位置

  • lib/

    有些Guacamole扩展.jar包的依赖包的放置位置

数据库认证的配置

首先要在系统预装数据库,Guacamole支持MariaDB,MySQL,PostgreSQL,SQL Server这里以mysql来举例。

同样的到官网下载guacamole-auth-jdbc-1.2.0.tar.gz包。其中guacamole-auth-jdbc-mysql-1.2.0.jar需要放在extensions/下。访问MySQL官网下载JDBC driver(mysql-connector-java-5.1.47-bin.jar)并放入lib下。

创建Guacamole数据库

首先在mysql中创建数据库

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.20

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_root_password';
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE DATABASE guacamole_db;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE USER 'guacamole_user'@'localhost' IDENTIFIED BY 'guacamole_user_password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

# 使用初始化脚本为数据库创建数据表
$ ls schema/
001-create-schema.sql  002-create-admin-user.sql  upgrade
$ cat schema/*.sql | mysql -u root -p guacamole_db
Enter password: new_root_password

接下来配置数据库认证文件

vim guacamole.properties
# 贴入下面几行
# MySQL properties
mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: some_password

到此安装配置结束,之后就可以通过guacamole平台进行管理了,默认用户密码为guacadmin/guacadmin.




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。