如何在 Debian 11 上安装 Apache Guacamole
在此页
- 先决条件
- 安装构建依赖项
- 安装 Apache Tomcat 9
- 编译 Guacamole-server
- 设置鳄梨酱服务器
- 安装 Guacamole 客户端 Web 应用程序
- 为鳄梨酱设置 Nginx 反向代理
- 验证 Apache Guacamole 安装
- 结论
Apache Guacamole 是一个免费的开源远程桌面网关,允许您使用 SSH、RDP 和 VNC 等不同协议远程连接到您的计算机/服务器。 Apache Guacamole 由 Apache Software Foundation 维护,并获得 Apache License 2.0 许可。
Apache Guacamole 是一个无客户端远程桌面网关。您可以随时随地仅使用 Web 浏览器访问 Apache Guacamole。如果您有多个使用不同协议的远程操作系统,例如使用 RDP 的 Windows、使用 VNC 和 SSH 的 Linux 系统,建议使用 Apache Guacamole。
在本教程中,您将安装 Apache Guacamole 并将其配置到 Debian 11 Bullseye。这包括安装一些依赖包和 Apache Tomcat 9,然后构建 Guacamole-server 并安装 Java 应用程序、Guacamole Web 应用程序。最后,您将设置 Nginx 作为 Guacamole Web 应用程序的反向代理,允许您从任何地方访问您的服务器,只要您有一个 Web 浏览器。
先决条件
要完成本教程,您需要满足以下要求:
- 一台运行 Debian 11 Bullseye 的至少 2GB RAM 的服务器。
- 具有 root 权限的用户或非 root 用户。
- 具有纳米编辑器的基本知识。或者您可以使用您喜欢的编辑器,例如 vim。
安装构建依赖项
首先,您将安装一些用于构建 Apache Guacamole 服务器的构建依赖项。这包括一些基本软件包,例如支持 VNC 协议的 libvncserver-dev、支持 SSH 协议的 libssh2-1、支持 RDP 协议的 freerdp2-dev 和支持 Kubernetes 的 libwebsockets-dev。
出于考虑,您不会为 Telnet 支持安装 libtelnet-dev。这是因为 telnet 被认为是一种旧协议并且不安全。
1. 现在,通过运行下面的 apt 命令来更新您的包列表。
sudo apt update
2. 之后,通过运行以下命令安装用于构建 Apache Guacamole 服务器的依赖项。
sudo apt install -y freerdp2-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libcairo2-dev libjpeg62-turbo-dev libjpeg-dev libpng-dev libtool-bin libpango1.0-dev libpango1.0-0 libssh2-1 libwebsockets16 libwebsocketpp-dev libossp-uuid-dev libssl-dev libwebp-dev libvorbis-dev libpulse-dev libwebsockets-dev libvncserver-dev libssh2-1-dev openssl
此命令可能需要一些时间才能完成,具体取决于您的服务器互联网连接。
安装 Apache Tomcat 9
安装构建依赖项后,您将安装 Apache Tomcat 9。Guacamole Web 应用程序需要此包,这是一个用 Java 编写的 Web 应用程序。
1. 运行以下命令将 Apache Tomcat 9 安装到您的系统中。
sudo apt install -y tomcat9 tomcat9-admin tomcat9-common tomcat9-user
2. Apache Tomcat 9 安装完成后,运行以下命令启动并启用Apache Tomcat 服务。在基于 Debian 的系统上,Apache Tomcat 9 附带名为 tomcat9 的服务。
sudo systemctl enable --now tomcat9
3. 现在,如果一切正常,请运行以下命令验证 tomcat9 服务的状态。
sudo systemctl status tomcat9
您将收到以下输出。确保 tomcat9 服务处于活动状态(正在运行)。

编译鳄梨酱服务器
在本节中,您将下载并编译 Guacamole-server。这是 Apache Guacamole 的主要组件,其中包含用于连接到远程服务器和桌面的库。 Guacamole-server 包含 C 库 libguacd 和支持协议的所有库,以及 Guacamole 的核心 guacd。
guacd 处理从 guacamole web 应用程序隧道传输的所有客户端连接,然后代表它们连接到远程服务器和桌面。通过构建和编译 Guacamole-server,您将在您的系统上拥有一个新的服务 guacd。
1. 首先将工作目录导航到 /usr/src。所有用于构建和编译东西的源代码都放在这个目录中。
cd /usr/src
2. 现在,您将通过运行下面的 wget 命令下载 Guacamole-server 源代码。请务必查看 Guacamole 下载页面并复制最新版本的 Guacamole-server。在撰写本文时,最新版本为 1.3.0。
wget https://dlcdn.apache.org/guacamole/1.3.0/source/guacamole-server-1.3.0.tar.gz
3. 然后,提取源代码,您将得到一个新目录guacamole-server-VERSION-NUMBER。导航到该目录。
tar -xzvf guacamole-server-1.3.0.tar.gz
cd guacamole-server-*/
4. 现在,验证构建 Guacamole-server 的所有系统要求,并通过运行以下命令设置您的环境。选项 --with-systemd-dir=/etc/systemd/system/ 用于设置 systemd 服务文件,该文件位于目录 /etc/systemd/system/ 。
./configure --with-systemd-dir=/etc/systemd/system/
你会收到类似这样的输出:
------------------------------------------------
guacamole-server version 1.3.0
------------------------------------------------
Library status:
freerdp2 ............ yes
pango ............... yes
libavcodec .......... yes
libavformat.......... yes
libavutil ........... yes
libssh2 ............. yes
libssl .............. yes
libswscale .......... yes
libtelnet ........... no
libVNCServer ........ yes
libvorbis ........... yes
libpulse ............ yes
libwebsockets ....... yes
libwebp ............. yes
wsock32 ............. no
Protocol support:
Kubernetes .... yes
RDP ........... yes
SSH ........... yes
Telnet ........ no
VNC ........... yes
Services / tools:
guacd ...... yes
guacenc .... yes
guaclog .... yes
FreeRDP plugins: /usr/lib/x86_64-linux-gnu/freerdp2
Init scripts: no
Systemd units: /etc/systemd/system/
Type "make" to compile guacamole-server.
查看库状态 和协议支持 部分。您可以通过安装额外的依赖项和库来调整协议支持。
5. 接下来,通过运行以下命令编译并安装 Guacamole-server。
make
make install
编译和安装过程可能需要一些时间才能完成。
6.现在,一切都完成后,运行以下命令来应用所有新的系统库。
sudo ldconfig
在本节中,您安装了 Guacamole-server 包。接下来,您将为鳄梨酱服务器创建一些必要的配置。
设置鳄梨酱服务器
要使 Guacamole-server 工作,您将创建配置目录 /etc/guacamole/,然后创建新文件 guacamole.properties 作为默认的 Guacamole-server 配置,文件 用于 Guacamole 日志系统的 logback.xml,以及用于定义 Guacamole 用户身份验证和与远程服务器和桌面的连接的文件 user-mapping.xml。
1. 首先,运行以下命令在附加目录 extensions 和 lib 中创建一个新目录 /etc/guacamole/。然后将环境变量 GUACAMOLE_HOME=/etc/guacamole 添加到文件 /etc/default/tomcat9.conf 中。这将告诉 Tomcat 9 servlet 容器查找 GUACAMOLE_HOME 目录到 /etc/guacamole/。
mkdir -p /etc/guacamole/{extensions,lib}
echo 'GUACAMOLE_HOME=/etc/guacamole' >> /etc/default/tomcat9
2. 现在,使用 nano 或您喜欢的编辑器创建主要配置 guacamole.properties。
sudo nano /etc/guacamole/guacamole.properties
输入以下配置:
# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port: 4822
# user mapping and user connections
user-mapping: /etc/guacamole/user-mapping.xml
- 选项 guacd-hostname 定义了运行 guacd 服务的主机名或 IP 地址。本教程使用本地主机来运行 guacd 服务。
- 选项 guacd-port 定义了 guacd 服务的默认端口。本教程使用端口 4822 提供 guacd 服务。
- 选项用户映射定义了用户身份验证的文件配置和可用连接列表。本教程使用文件 /etc/guacamole/user-mapping.xml 来定义 Guacamole 服务器的用户和连接。您可能有兴趣使用另一种身份验证方法,请查看 Guacamole 文档。
保存并关闭文件。
3. 接下来,创建一个新配置loogback.xml 用于记录和调试。默认情况下,鳄梨酱只会记录到控制台。使用此配置允许 Guacamole 通过 Logback 日志框架进行日志记录。
sudo nano /etc/guacamole/logback.xml
添加以下配置行。
<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>
<!-- Log at DEBUG level -->
<root level="debug">
<appender-ref ref="GUAC-DEBUG"/>
</root>
</configuration>
保存并关闭配置文件。
4. 现在,您将生成一个新的 md5 密码哈希并创建一个用于鳄梨酱用户身份验证和连接的新文件。
运行以下命令以生成 md5 密码哈希。并确保使用强密码更改密码。
echo -n StrongPasswordUserJohnDoe | openssl md5
您将收到 mod5 散列密码的输出。将其复制到您的笔记中。
(stdin)= aca22211ffcfb8aa8ad7627195ad4fce
5. 之后,使用 nano 编辑器创建一个新文件 user-mapping.xml。
sudo nano /etc/guacamole/user-mapping.xml
输入以下这些配置。并确保更改用户名和密码。另外,查看
<user-mapping>
<!-- Another user, but using md5 to hash the password
(example below uses the md5 hash of "PASSWORD") -->
<authorize
username="johndoe"
password="aca22211ffcfb8aa8ad7627195ad4fce"
encoding="md5">
<!-- First authorized connection -->
<connection name="SSH localhost">
<protocol>ssh</protocol>
<param name="hostname">localhost</param>
<param name="port">22</param>
<param name="username">johndoe</param>
<param name="password">SSHPASSWORD</param>
</connection>
<!-- Second authorized connection -->
<connection name="localhost">
<protocol>vnc</protocol>
<param name="hostname">localhost</param>
<param name="port">5901</param>
<param name="password">VNCPASS</param>
</connection>
<!-- Third authorized connection -->
<connection name="otherhost">
<protocol>vnc</protocol>
<param name="hostname">otherhost</param>
<param name="port">5900</param>
<param name="password">VNCPASS</param>
</connection>
</authorize>
</user-mapping>
保存并关闭文件。
现在你已经完成了 Guacamole-server 的配置。接下来,您将安装和配置 Guacamole Web 应用程序,这是您将在浏览器上看到的 Web 应用程序。
安装 Guacamole 客户端 Web 应用程序
在本节中,您将把 Guacamole Web 应用程序安装到您的系统中。这可以通过下载 Guacamole Web 应用程序的已编译二进制文件并将其部署到 Tomcat webaps 目录来完成。
1. 将您的工作目录导航到 /usr/src 并使用 wget 命令下载已编译的 Guacamole Web 应用程序 .war。确保访问 Guacamole 下载页面并复制最新版本 Guacamole Web 应用程序的链接。
cd /usr/src
wget https://dlcdn.apache.org/guacamole/1.3.0/binary/guacamole-1.3.0.war
2. 现在,通过运行以下命令将 Java 二进制应用程序 guacamole-VERSION.war 部署到 Tomcat 目录 /var/lib/tomcat9/webapps/。这使得 Guacamole Web 应用程序可以通过 Apache Tomcat servlet 容器访问。
sudo cp guacamole-1.3.0.war /var/lib/tomcat9/webapps/guacamole.war
3. 之后重启Tomcat 9服务,应用一个新的web应用。
sudo systemctl restart tomcat9
4. 接下来,通过运行以下命令启动并启用 guacd 服务。
sudo systemctl enable --now guacd
然后使用以下命令验证它。
sudo systemctl status guacd
您将收到如下面的屏幕截图所示的输出。

此时,您已经完成了 Guacamole-server 应用程序(后端)和 Guacamole Web 应用程序(前端)的安装。接下来,您将设置 Nginx 作为 Guacamole Web 应用程序的反向代理。
为鳄梨酱设置 Nginx 反向代理
在本节中,您将安装 Nginx Web 服务器并将其配置为 Guacamole Web 应用程序的反向代理。这允许您为您的 Guacamole Web 应用程序设置域名并使用 SSL 证书保护它。
1. 首先,运行以下 apt 命令来安装 Nginx 包。
sudo apt install nginx -y
2.所有Nginx包安装完成后,在/etc/nginx/sites-available目录下新建一个虚拟主机文件guacamole。所有与 Guacamole 反向代理相关的配置都将存储在这个文件中。
sudo nano /etc/nginx/sites-available/guacamole
输入以下配置。并确保更改 SSL 证书的域名和路径。此示例使用带有 SSL 私钥 privkey.pem 和公钥 fullchain.pem 的域 example.io,以及可用的机器人证书目录 /etc/letsencrypt/live/exmaple.io/。
server {
listen 80;
server_name example.io;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 ssl http2;
server_name example.io;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
ssl_certificate /etc/letsencrypt/live/example.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.io/privkey.pem;
access_log /var/log/nginx/guacamole-access.log;
error_log /var/log/nginx/guacamole-error.log;
location /guacamole/ {
proxy_pass http://127.0.0.1:8080/guacamole/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
access_log off;
}
}
保存并关闭文件。
3. 现在,通过创建指向目录 /etc/nginx/sites-enabled/ 的新符号链接来激活虚拟主机文件 guacamole。然后验证所有 Nginx 配置以检查是否存在任何语法错误。
sudo ln -s /etc/nginx/sites-available/guacamole /etc/nginx/sites-enabled/
sudo nginx -t
您将收到一个输出 Syntax OK,这意味着配置没有错误。

4. 接下来,重新启动 Nginx 服务以应用新配置,然后通过运行以下命令验证其状态。
sudo systemctl restart nginx
sudo systemtl status nginx
您将收到类似于下面屏幕截图的输出。 Nginx 服务处于活动状态(正在运行)。

5. 此外,如果您想在不同的子 URL 中部署 Guacamole 网络应用程序,请将选项 location /guacamole/ { ... } 更改为新路径 location /new-path/ { ... } 并将选项 proxy_cookie_path 添加到您的新路径,如下所示。
location /new-path/ {
proxy_pass http://127.0.0.1:8080/guacamole/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_cookie_path /guacamole/ /new-path/;
access_log off;
}
在本节中,您已完成 Nginx 安装和配置,作为 Guacamole Web 应用程序的反向代理。此时,您的 Apache Guacamole 安装已完成,可以通过您的域名访问它。
验证 Apache Guacamole 安装
在本节中,您将验证 Apache Guacamole 安装。
首先,打开您的 Web 浏览器并使用默认路径 /guacamole 输入 Guacamole 安装的域名。
现在,您会在下面看到鳄梨酱登录页面。输入您在文件 user-mapping.xml 中配置的用户名和密码,然后单击“登录”按钮。

登录后,您将看到为您的用户定义的连接列表。

单击连接名称以连接到目标服务器。此示例将使用 SSH 协议连接到本地服务器。
现在,您将在服务器上看到一个新的 ssh 终端会话。

结论
恭喜!在本教程中,您学习了如何在 Debian 11 Bullseye 上安装 Apache Guacamole。此外,您还学习了如何使用配置文件 user-mapping.xml 设置用户身份验证和连接,以及如何将 Nginx 设置为 Guacamole Web 应用程序的反向代理,这使您能够使用域名并使用 SSL 证书保护它。