searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Apache Guacamole使用实验(一)

2023-07-25 01:31:07
1145
0

1、实验概述

Apache Guacamole 是个无客户端的开源远程桌面网关,支持 VNC、RDP 和 SSH 等标准协议,开源协议类型是 Apache License Version 2.0。Guacamole Client 是 HTML5 Web 应用,用户可以在不需要任何插件或者客户端软件的情况下,通过 Web 浏览器访问远程桌面。

# Apache Guacamole 官网
https://guacamole.apache.org/

官方提供的架构图:

Apache Guacamole 由两部分组成,guacamole-server 和 guacamole-client,详细的信息建议查看官方文档。

本次实验的目标:

  1. 使用源码完成 Guacamole 的部署
  2. 使用 Docker 完成 Guacamole 的部署
  3. 验证 SSH 连接
  4. 验证 VNC 连接
  5. 验证 RDP 连接

 

2、安装&部署

接下来我们按照官方使用手册中 Installing Guacamole natively 和 Installing Guacamole with Docker 安装两种方式进行实践操作。

 

2.1、本地安装方式

服务器:华为 Kunpeng 裸金属服务器

配置项 配置值
服务器类型 ARM BMS
操作系统 CentOS 7.6
CPU 128 cores
内存 256 GB

部署分成两部分:

  • guacamole-server:提供 guacd 代理和相关库,需要使用源码进行构建
  • guacamole-client:运行在 Serlvet 容器(例如 Tomcat)中的客户端,以二进制形式提供

 

2.1.1、构建 guacamole-server

2.1.1.1、安装必须的依赖

安装命令:

# 使用 yum 进行依赖安装
yum install -y cairo-devel \
        libjpeg-turbo-devel \
        libjpeg-devel \
        libpng-devel \
        libtool \
        libuuid-devel \
        uuid-devel

 

2.1.1.2、安装可选的依赖
   
Guacamole 的可选依赖项决定了 guacamole-server 的哪些部分将被构建。这包括对各种远程桌面协议的支持,以及这些协议的任何附加功能:

  • FFmpeg 支持将屏幕录制转换为视频,至少安装了 FFmpeg 提供的 libavcodec、libavformat、libavutil 和 libswscale 库后才能构建
  • VNC 支持依赖于 libvncclient 库,它是 libVNCServer 的一部分
  • RDP 支持取决于最新版本的 FreeRDP(2.0.0 或更高版本,但请不要使用 git 的非发布版本)
  • SSH 支持依赖于 libssh2、OpenSSL 和 Pango(字体渲染和文本布局库,由 Guacamole 的内置终端模拟器使用)
  • Telnet 依赖于 libtelnet 和 Pango
  • Kubernetes 支持依赖于 libwebsockets、OpenSSL 和 Pango

安装命令:

# 使用 yum 进行依赖安装
yum install -y ffmpeg-devel \
        freerdp-devel \
        libssh2-devel \
        pango-devel \
        libtelnet-devel \
        libvncserver-devel \
        libwebsockets-devel \
        pulseaudio-libs-devel \
        openssl-devel \
        libvorbis-devel \
        libwebp-devel

 

由于 ARM 生态实在太差了,ffmpeg-devel、libtelnet-devel、libwebsockets-devel 无法直接使用 yum 安装,我们至少需要手动把 FFmpeg 用源码安装起来。

 

2.1.2、源码构建 FFmpeg
   
使用的是 FFmpeg-n4.3.1 版本,安装到 /opt/FFmpeg-n4.3.1 目录。

# 已下载源码包到指定目录
tar -zxf FFmpeg-n4.3.1.tar.gz
cd FFmpeg-n4.3.1

# 编译 & 安装
# --enable-shared 是必须的
# --prefix 是安装到指定目录
./configure --enable-shared --prefix=/opt/FFmpeg-n4.3.1
make
make install

 

2.1.3、安装 guacamole-server
   
使用的是 guacamole-server-1.3.0 版本,安装到 /opt/guacamole-server-1.3.0 目录。

# 已下载源码包到指定目录
tar -zxf guacamole-server-1.3.0.tar.gz
cd guacamole-server-1.3.0

# 设置关于 FFmpeg 的依赖
# 可设置的依赖属性可以通过 ./configure --help 查看
export PKG_CONFIG_PATH=/opt/FFmpeg-n4.3.1/lib/pkgconfig/
export LD_LIBRARY_PATH=/opt/FFmpeg-n4.3.1/lib

# 编译 & 安装
./configure --prefix=/opt/guacamole-server-1.3.0
make
make install

./configure 后可以看到依赖库和协议支持的情况。


2.1.4、配置 & 启动 guacamole-server

主要配置 guacd 进程需要监听的 IP 和 Port,配置方式请参考官方使用手册。

# 启动 guacd
# 默认会启动在 127.0.0.1:4822
cd /opt/guacamole-server-1.3.0
./sbin/guacd

启动并查看端口占用情况。

 

2.1.5、部署 guacamole-client

官方提供了 guacamole-client 的 war 包,可以直接部署在 Tomcat 上进行部署。

使用的是 guacamole-1.3.0 版本。

# 拷贝 guacamole-1.3.0.war 到 Tomcat/webapps 目录
# /path/to/ 需要替换成用户的实际路径
cp /path/to/guacamole-1.3.0.war /path/to/tomcat/webapps

# 启动 Tomcat
cd /path/to/tomcat
./bin/start.sh

启动并查看启动日志。

浏览器打开 http://localhost:8080/guacamole-1.3.0/ 已经可以看到登录页面。还需要在 /etc/guacamole 目录完成用户和连接的配置,才能正常开始使用,不过我们先继续往下看看使用 Docker 方式的部署。

 

2.2、Docker 方式安装

服务器:弹性云服务器

配置项 配置值
服务器类型 x86 ECS
操作系统 CentOS 7.6
CPU 2 vCPU
内存 4 G

使用 Docker 部署,无需从源代码构建 guacamole-server 或手动配置 Web 应用程序。

官方使用手册中典型 Docker 部署涉及三个独立容器,在创建时链接在一起:

  • guacamole/guacd:提供 guacd 守护进程,由已发布的 guacamole-server 源构建,支持 VNC、RDP、SSH、telnet 和 Kubernetes
  • guacamole/guacamole:提供在 Tomcat 8 中运行并支持 WebSocket 的 Guacamole Web 应用程序。连接 guacd、MySQL、PostgreSQL、LDAP 等所需的配置将在镜像启动时根据 Docker 链接或环境变量自动生成
  • mysql 或者 postgresql:提供 Guacamole 将用于身份验证和存储连接配置数据的数据库

为了简化身份验证的操作,我们只部署 guacamole/guacd 和 guacamole/guacamole,身份验证使用配置文件的方式完成。

 

2.2.1、部署 guacamole/guacd
guacd 和 guacamole 在同一台机器上,所以不设置端口暴露。另外需要注意,guacd 是个被动代理,本身不具备身份认证的能力,如果对不可信任网络暴露端口的话,恶意用户可能使用 guacd 跳转到其他系统。

docker run --name some-guacd -d guacamole/guacd

 

2.2.2、部署 guacamole/guacamole

由于不使用数据库来作为身份验证,需要在启动时指定本地的配置文件目录。

docker run --name some-guacamole \
        --link some-guacd:guacd \
        -v /local/path:/etc/guacamole \
        -e GUACAMOLE_HOME=/etc/guacamole \
        -p 8080:8080 \
        -d guacamole/guacamole

浏览器打开 http://localhost:8080/guacamole/ 已经可以看到登录页面,不过也需要在 /etc/guacamole/ 目录完成用户和连接的配置,才能正常开始使用。

 

3、配置 & 验证

Guacamole 的默认身份验证模块很简单,由用户名到配置的映射组成。这个身份验证模块始终处于启用状态,但只会从 XML 文件中读取(如果存在),并且相对于任何其他身份验证扩展,优先级始终位于最后。

默认的身份验证 XML 文件位于 GUACAMOLE_HOME/user-mapping.xml,如果没有重新设置 GUACAMOLE_HOME 的话,默认指向的就是 /etc/guacamole/user-mapping.xml 文件。

 

3.1、SSH 连接
   
修改 /etc/guacamole/user-mapping.xml 添加 SSH 连接。这里没有直接把 SSH 连接的账号密码配置进去,所以登录的时候需要再输一遍。

由于服务器本身开启了 SSHD 服务,我们直接用本地服务器进行验证即可。

 

浏览器打开 http://localhost:8080/guacamole-1.3.0/,使用 authorize 中配置的账号密码进行登录。

 

再次输入本地服务器的 SSH 账号密码进行登录,连接成功。

可以看到字体出现了问题,我们可以通过 yum 安装字体解决这个问题。

# yum 查询字体
yum search font

# yum 安装字体
yum install -y thai-scalable-*

 

重新启动后,可以看到界面字体显示正常。

 

3.2、VNC 连接

系统没有安装图形化桌面和 VNC Server,所以需要先完成安装,才能使用 VNC 进行连接。

# 安装 GNOME 图形化界面
yum groupinstall "GNOME Desktop"

# 安装 VNC Server
yum install -y tigervnc-server tigervnc vnc vnc-server

 

VNC Server 一般会设置成系统服务的形式启动,不过这次我们没必要这么复杂。首次使用的话,先使用命令设置登录密码:

vncpasswd

 

使用命令启动 VNC Server:

# 指定5901端口启动服务
vncserver :1

# 查看
vncserver -list

 

使用 VNC Viewer 验证服务是否OK。

 

修改 /etc/guacamole/user-mapping.xml 添加 VNC 连接。这里也是没有直接把 VNC 连接的账号密码配置进去,所以登录的时候需要再输一遍。

 

浏览器打开 http://localhost:8080/guacamole-1.3.0/ 登录后,可以看到我们多了一个 VNC 的连接配置。

 

使用新配置的 VNC 进行连接,输入密码后可以和 VNC Viewer 一样进入到图形化界面。

 

3.3、RDP 连接
   
RDP 连接的方式没有记录详细的过程,不过基本连接的配置基本和 SSH、VNC 一样。

大致步骤是:

  1. 安装 xrdp
  2. 使用 Windows 系统自带的 `mstsc` 服务进行验证连接
  3. 修改 guacamole 配置文件,增加 RDP 连接配置

 

安装 xrdp 方法:

# 配置源
yum install -y epel-release
yum clean all
yum makecache

# 安装 xrdp
yum install -y xrdp tigervnc-server

# 启动 xrdp,默认的启动端口是 3389
systemctl start xrdp.service 

 

4、总结

以上就是本次 Apache Guacamole 的上手实验过程,把 Guacamole 的安装部署和 SSH、VNC 基础的连接功能验证了一遍,不过 SSH、VNC 的连接配置上还有很多可选的配置项待验证。更多的信息请见官方的使用手册。

0条评论
0 / 1000
陈嘉杰
3文章数
1粉丝数
陈嘉杰
3 文章 | 1 粉丝
陈嘉杰
3文章数
1粉丝数
陈嘉杰
3 文章 | 1 粉丝
原创

Apache Guacamole使用实验(一)

2023-07-25 01:31:07
1145
0

1、实验概述

Apache Guacamole 是个无客户端的开源远程桌面网关,支持 VNC、RDP 和 SSH 等标准协议,开源协议类型是 Apache License Version 2.0。Guacamole Client 是 HTML5 Web 应用,用户可以在不需要任何插件或者客户端软件的情况下,通过 Web 浏览器访问远程桌面。

# Apache Guacamole 官网
https://guacamole.apache.org/

官方提供的架构图:

Apache Guacamole 由两部分组成,guacamole-server 和 guacamole-client,详细的信息建议查看官方文档。

本次实验的目标:

  1. 使用源码完成 Guacamole 的部署
  2. 使用 Docker 完成 Guacamole 的部署
  3. 验证 SSH 连接
  4. 验证 VNC 连接
  5. 验证 RDP 连接

 

2、安装&部署

接下来我们按照官方使用手册中 Installing Guacamole natively 和 Installing Guacamole with Docker 安装两种方式进行实践操作。

 

2.1、本地安装方式

服务器:华为 Kunpeng 裸金属服务器

配置项 配置值
服务器类型 ARM BMS
操作系统 CentOS 7.6
CPU 128 cores
内存 256 GB

部署分成两部分:

  • guacamole-server:提供 guacd 代理和相关库,需要使用源码进行构建
  • guacamole-client:运行在 Serlvet 容器(例如 Tomcat)中的客户端,以二进制形式提供

 

2.1.1、构建 guacamole-server

2.1.1.1、安装必须的依赖

安装命令:

# 使用 yum 进行依赖安装
yum install -y cairo-devel \
        libjpeg-turbo-devel \
        libjpeg-devel \
        libpng-devel \
        libtool \
        libuuid-devel \
        uuid-devel

 

2.1.1.2、安装可选的依赖
   
Guacamole 的可选依赖项决定了 guacamole-server 的哪些部分将被构建。这包括对各种远程桌面协议的支持,以及这些协议的任何附加功能:

  • FFmpeg 支持将屏幕录制转换为视频,至少安装了 FFmpeg 提供的 libavcodec、libavformat、libavutil 和 libswscale 库后才能构建
  • VNC 支持依赖于 libvncclient 库,它是 libVNCServer 的一部分
  • RDP 支持取决于最新版本的 FreeRDP(2.0.0 或更高版本,但请不要使用 git 的非发布版本)
  • SSH 支持依赖于 libssh2、OpenSSL 和 Pango(字体渲染和文本布局库,由 Guacamole 的内置终端模拟器使用)
  • Telnet 依赖于 libtelnet 和 Pango
  • Kubernetes 支持依赖于 libwebsockets、OpenSSL 和 Pango

安装命令:

# 使用 yum 进行依赖安装
yum install -y ffmpeg-devel \
        freerdp-devel \
        libssh2-devel \
        pango-devel \
        libtelnet-devel \
        libvncserver-devel \
        libwebsockets-devel \
        pulseaudio-libs-devel \
        openssl-devel \
        libvorbis-devel \
        libwebp-devel

 

由于 ARM 生态实在太差了,ffmpeg-devel、libtelnet-devel、libwebsockets-devel 无法直接使用 yum 安装,我们至少需要手动把 FFmpeg 用源码安装起来。

 

2.1.2、源码构建 FFmpeg
   
使用的是 FFmpeg-n4.3.1 版本,安装到 /opt/FFmpeg-n4.3.1 目录。

# 已下载源码包到指定目录
tar -zxf FFmpeg-n4.3.1.tar.gz
cd FFmpeg-n4.3.1

# 编译 & 安装
# --enable-shared 是必须的
# --prefix 是安装到指定目录
./configure --enable-shared --prefix=/opt/FFmpeg-n4.3.1
make
make install

 

2.1.3、安装 guacamole-server
   
使用的是 guacamole-server-1.3.0 版本,安装到 /opt/guacamole-server-1.3.0 目录。

# 已下载源码包到指定目录
tar -zxf guacamole-server-1.3.0.tar.gz
cd guacamole-server-1.3.0

# 设置关于 FFmpeg 的依赖
# 可设置的依赖属性可以通过 ./configure --help 查看
export PKG_CONFIG_PATH=/opt/FFmpeg-n4.3.1/lib/pkgconfig/
export LD_LIBRARY_PATH=/opt/FFmpeg-n4.3.1/lib

# 编译 & 安装
./configure --prefix=/opt/guacamole-server-1.3.0
make
make install

./configure 后可以看到依赖库和协议支持的情况。


2.1.4、配置 & 启动 guacamole-server

主要配置 guacd 进程需要监听的 IP 和 Port,配置方式请参考官方使用手册。

# 启动 guacd
# 默认会启动在 127.0.0.1:4822
cd /opt/guacamole-server-1.3.0
./sbin/guacd

启动并查看端口占用情况。

 

2.1.5、部署 guacamole-client

官方提供了 guacamole-client 的 war 包,可以直接部署在 Tomcat 上进行部署。

使用的是 guacamole-1.3.0 版本。

# 拷贝 guacamole-1.3.0.war 到 Tomcat/webapps 目录
# /path/to/ 需要替换成用户的实际路径
cp /path/to/guacamole-1.3.0.war /path/to/tomcat/webapps

# 启动 Tomcat
cd /path/to/tomcat
./bin/start.sh

启动并查看启动日志。

浏览器打开 http://localhost:8080/guacamole-1.3.0/ 已经可以看到登录页面。还需要在 /etc/guacamole 目录完成用户和连接的配置,才能正常开始使用,不过我们先继续往下看看使用 Docker 方式的部署。

 

2.2、Docker 方式安装

服务器:弹性云服务器

配置项 配置值
服务器类型 x86 ECS
操作系统 CentOS 7.6
CPU 2 vCPU
内存 4 G

使用 Docker 部署,无需从源代码构建 guacamole-server 或手动配置 Web 应用程序。

官方使用手册中典型 Docker 部署涉及三个独立容器,在创建时链接在一起:

  • guacamole/guacd:提供 guacd 守护进程,由已发布的 guacamole-server 源构建,支持 VNC、RDP、SSH、telnet 和 Kubernetes
  • guacamole/guacamole:提供在 Tomcat 8 中运行并支持 WebSocket 的 Guacamole Web 应用程序。连接 guacd、MySQL、PostgreSQL、LDAP 等所需的配置将在镜像启动时根据 Docker 链接或环境变量自动生成
  • mysql 或者 postgresql:提供 Guacamole 将用于身份验证和存储连接配置数据的数据库

为了简化身份验证的操作,我们只部署 guacamole/guacd 和 guacamole/guacamole,身份验证使用配置文件的方式完成。

 

2.2.1、部署 guacamole/guacd
guacd 和 guacamole 在同一台机器上,所以不设置端口暴露。另外需要注意,guacd 是个被动代理,本身不具备身份认证的能力,如果对不可信任网络暴露端口的话,恶意用户可能使用 guacd 跳转到其他系统。

docker run --name some-guacd -d guacamole/guacd

 

2.2.2、部署 guacamole/guacamole

由于不使用数据库来作为身份验证,需要在启动时指定本地的配置文件目录。

docker run --name some-guacamole \
        --link some-guacd:guacd \
        -v /local/path:/etc/guacamole \
        -e GUACAMOLE_HOME=/etc/guacamole \
        -p 8080:8080 \
        -d guacamole/guacamole

浏览器打开 http://localhost:8080/guacamole/ 已经可以看到登录页面,不过也需要在 /etc/guacamole/ 目录完成用户和连接的配置,才能正常开始使用。

 

3、配置 & 验证

Guacamole 的默认身份验证模块很简单,由用户名到配置的映射组成。这个身份验证模块始终处于启用状态,但只会从 XML 文件中读取(如果存在),并且相对于任何其他身份验证扩展,优先级始终位于最后。

默认的身份验证 XML 文件位于 GUACAMOLE_HOME/user-mapping.xml,如果没有重新设置 GUACAMOLE_HOME 的话,默认指向的就是 /etc/guacamole/user-mapping.xml 文件。

 

3.1、SSH 连接
   
修改 /etc/guacamole/user-mapping.xml 添加 SSH 连接。这里没有直接把 SSH 连接的账号密码配置进去,所以登录的时候需要再输一遍。

由于服务器本身开启了 SSHD 服务,我们直接用本地服务器进行验证即可。

 

浏览器打开 http://localhost:8080/guacamole-1.3.0/,使用 authorize 中配置的账号密码进行登录。

 

再次输入本地服务器的 SSH 账号密码进行登录,连接成功。

可以看到字体出现了问题,我们可以通过 yum 安装字体解决这个问题。

# yum 查询字体
yum search font

# yum 安装字体
yum install -y thai-scalable-*

 

重新启动后,可以看到界面字体显示正常。

 

3.2、VNC 连接

系统没有安装图形化桌面和 VNC Server,所以需要先完成安装,才能使用 VNC 进行连接。

# 安装 GNOME 图形化界面
yum groupinstall "GNOME Desktop"

# 安装 VNC Server
yum install -y tigervnc-server tigervnc vnc vnc-server

 

VNC Server 一般会设置成系统服务的形式启动,不过这次我们没必要这么复杂。首次使用的话,先使用命令设置登录密码:

vncpasswd

 

使用命令启动 VNC Server:

# 指定5901端口启动服务
vncserver :1

# 查看
vncserver -list

 

使用 VNC Viewer 验证服务是否OK。

 

修改 /etc/guacamole/user-mapping.xml 添加 VNC 连接。这里也是没有直接把 VNC 连接的账号密码配置进去,所以登录的时候需要再输一遍。

 

浏览器打开 http://localhost:8080/guacamole-1.3.0/ 登录后,可以看到我们多了一个 VNC 的连接配置。

 

使用新配置的 VNC 进行连接,输入密码后可以和 VNC Viewer 一样进入到图形化界面。

 

3.3、RDP 连接
   
RDP 连接的方式没有记录详细的过程,不过基本连接的配置基本和 SSH、VNC 一样。

大致步骤是:

  1. 安装 xrdp
  2. 使用 Windows 系统自带的 `mstsc` 服务进行验证连接
  3. 修改 guacamole 配置文件,增加 RDP 连接配置

 

安装 xrdp 方法:

# 配置源
yum install -y epel-release
yum clean all
yum makecache

# 安装 xrdp
yum install -y xrdp tigervnc-server

# 启动 xrdp,默认的启动端口是 3389
systemctl start xrdp.service 

 

4、总结

以上就是本次 Apache Guacamole 的上手实验过程,把 Guacamole 的安装部署和 SSH、VNC 基础的连接功能验证了一遍,不过 SSH、VNC 的连接配置上还有很多可选的配置项待验证。更多的信息请见官方的使用手册。

文章来自个人专栏
陈嘉杰
3 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0