在Ubuntu 20.04 Server上设置Apache Guacamole远程桌面

本教程将向您展示如何在Ubuntu 20.04服务器上设置Guacamole远程桌面。 Guacamole是由Apache软件基金会开发的免费,开源远程桌面网关。

鳄梨酱的功能

  • 它允许您从Web浏览器访问远程桌面。 客户端上不需要安装其他软件。
  • 支持标准协议,如VNC,RDP,SSH和Kubernetes。
  • VNC会话可以图形方式记录。
  • 通过CAS,OpenID Connect或SAML 2.0进行单点登录
  • 局域网唤醒
  • 轻松管理多个远程桌面会话。
  • 支持TOTP两因素认证。
  • 支持剪贴板(复制和粘贴)以及通过SFTP传输文件。
  • 支持音频输入和输出
  • 和更多。

鳄梨酱本身不是远程桌面协议。 它是远程桌面和客户端之间的代理,因此可以在Web浏览器中显示和控制远程桌面。

步骤1:从源代码构建鳄梨酱服务器

登录到您的Ubuntu 20.04服务器并安装依赖项软件包。

sudo apt update

sudo apt install build-essential libcairo2-dev libjpeg-turbo8-dev libpng-dev libtool-bin libossp-uuid-dev libvncserver-dev freerdp2-dev libssh2-1-dev libtelnet-dev libwebsockets-dev libpulse-dev libvorbis-dev libwebp-dev libssl-dev libpango1.0-dev libswscale-dev libavcodec-dev libavutil-dev libavformat-dev

下载guacamole-server的最新稳定版本。

wget http://mirror.cc.columbia.edu/pub/software/apache/guacamole/1.2.0/source/guacamole-server-1.2.0.tar.gz

提取档案。

tar -xvf guacamole-server-1.2.0.tar.gz

转到提取的目录。

cd guacamole-server-1.2.0

配置构建环境。

./configure --with-init-dir=/etc/init.d

然后编译鳄梨酱服务器。

sudo make

安装鳄梨酱服务器。

sudo make install

更新系统的已安装库的缓存。

sudo ldconfig

重新加载systemd,因此它可以找到 guacd (鳄梨酱代理守护程序)服务安装在 /etc/init.d/ 目录。

sudo systemctl daemon-reload

开始 guacd 服务。

sudo systemctl start guacd

在启动时启用自动启动。

sudo systemctl enable guacd

检查其状态。

systemctl status guacd

如您所见,它是 活动(运行)

鳄梨酱代理守护程序

瓜德听 127.0.0.1:4822,可以用 ss 效用。

sudo ss -lnpt | grep guacd

guacd端口4822

步骤2:安装Guacamole Web应用程序

Guacamole Web应用程序是用Java编写的,因此我们需要安装Java Servlet容器,例如Apache Tomcat。

sudo apt install tomcat9 tomcat9-admin tomcat9-common tomcat9-user

Apache Tomcat将在端口8080上侦听,如下所示:

sudo ss -lnpt | grep java

Ubuntu的20.04 Apache Tomcat的端口鳄梨调味酱

如果您有其他软件在端口8080上侦听,则Tomcat无法绑定到端口8080。您应将另一个进程配置为使用其他端口,然后重新启动Tomcat(sudo systemctl restart tomcat9)。

接下来,下载Guacamole Web应用程序。

wget https://downloads.apache.org/guacamole/1.2.0/binary/guacamole-1.2.0.war

将文件移动到Web应用程序目录(/var/lib/tomcat9/webapps)并同时重命名文件(删除版本号)。

sudo mv guacamole-1.2.0.war /var/lib/tomcat9/webapps/guacamole.war

重新启动Tomcat和guacd。

sudo systemctl restart tomcat9 guacd

步骤3:配置鳄梨调味酱

为鳄梨酱创建一个配置目录。

sudo mkdir /etc/guacamole/

创建一个配置文件。

sudo nano /etc/guacamole/guacamole.properties

在此文件中添加以下行。 有些人可能会说您不需要添加这些行,因为它们是默认值。 我向您展示了基本配置,因此您可以在需要时对其进行自定义。

# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port:     4822

# Auth provider class (authenticates user/pass combination, needed if using the provided login screen)
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
basic-user-mapping: /etc/guacamole/user-mapping.xml

保存并关闭文件。 鳄梨酱中的默认身份验证模块从XML文件读取用户名和密码: /etc/guacamole/user-mapping.xml。 在创建此文件之前,我们需要使用以下命令为您的密码生成MD5哈希。 更换 your_password 使用您的首选密码。

echo -n your_password | openssl md5

样本输出:

(stdin)= 1060b7b46a3bd36b3a0d66e0127d0517

接下来,创建用户映射XML文件。

sudo nano /etc/guacamole/user-mapping.xml

添加以下行。 在这里,我们指定后端将使用VNC(虚拟网络计算)协议。 替换用户名和密码哈希。 稍后我们将创建一个VNC密码。

<user-mapping>

    <!-- Per-user authentication and config information -->
    <authorize
         username="your_preferred_username"
         password="1060b7b46a3bd36b3a0d66e0127d0517"
         encoding="md5">
      
       <connection name="default">
         <protocol>vnc</protocol>
         <param name="hostname">localhost</param>
         <param name="port">5901</param>
         <param name="password">vnc_password</param>
       </connection>
    </authorize>

</user-mapping>

保存并关闭文件。 重新启动Tomcat和guacd。

sudo systemctl restart tomcat9 guacd

步骤4:在Ubuntu 20.04 Server上安装桌面环境

由于我们要设置一个远程桌面,因此我们需要一个桌面环境。 在安装桌面环境之前,请确保服务器具有足够的RAM。 有许多桌面环境。 我发现轻量级XFCE桌面环境可与VNC很好地配合使用,因此请使用以下命令进行安装。

sudo apt install xfce4 xfce4-goodies firefox

在安装过程中,可能会要求您选择默认的显示管理器。 这个选择没有多大关系,因为您不会在VNC会话中看到登录屏幕。

由于服务器上运行着桌面环境,因此强烈建议您使用UFW之类的防火墙来限制访问,并仅向公众开放必要的端口。 您可以阅读以下教程,以了解如何在Ubuntu上启用和使用UFW。

  • 如何在Debian,Ubuntu,Linux Mint上使用UFW防火墙

步骤5:在Ubuntu 20.04服务器上安装VNC服务器

Linux用户可以使用多种VNC服务器软件。 我们将使用TigerVNC服务器,因为它最适合与鳄梨酱一起使用。

sudo apt install tigervnc-standalone-server

运行以下命令以启动VNC服务器。

vncserver

TigerVNC首次启动时,会要求您设置VNC密码。 请注意,密码不能超过8个字符。 然后,您可以选择是否需要查看密码。

鳄梨调味酱ightvncserver密码ubuntu 20.04

现在,您应该编辑 /etc/guacamole/user-mapping.xml 文件并更改VNC密码。 然后重新启动Tomcat和guacd。

sudo systemctl restart tomcat9 guacd

vncserver 命令在您的主目录下创建两个文件。

  • 〜/ .Xauthrirty
  • 〜/ .vnc / xstartup

xstartup文件指定了TigerVNC服务器将启动的应用程序。 编辑此文件。

nano ~/.vnc/xstartup

更改

#!/bin/sh

#!/bin/bash

因为Bash是Linux上的标准Shell。 然后注释掉以下几行。 (添加一个 # 每行开头的字符)。

xsetroot -solid grey
export XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession

接下来,在底部添加以下行,这将使TigerVNC服务器启动LXQT桌面环境。 的 startxfce4 二进制文件由 xfce4-session 包。

startxfce4 &

保存并关闭文件。

故障排除

如果您的tigerVNC服务器未创建 ~/.vnc/xstartup 文件和VNC服务器失败,如下所示:

tigervncserver -xstartup

然后,您可以手动创建文件。

nano ~/.vnc/xstartup

在文件中添加以下行。

#!/bin/sh

xrdb $HOME/.Xresources
startxfce4 &

保存并关闭文件。

创建系统服务

TigerVNC服务器不附带任何系统服务单元。 为了使它在引导时启动,我们需要创建一个systemd服务单元。

sudo nano /etc/systemd/system/[email protected]

在文件中添加以下行。 用您的真实用户名替换用户名。

[Unit]
Description=a wrapper to launch an X server for VNC
After=syslog.target network.target

[Service]
Type=forking
User=username
Group=username
WorkingDirectory=/home/username

ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

保存并关闭文件。 停止当前的VNC服务器实例。

vncserver -kill :1

使用systemd启动VNC服务器。

sudo systemctl start [email protected]

在启动时启用自动启动。

sudo systemctl enable [email protected]

检查其状态:

systemctl status [email protected]

如您所见,它处于活动状态(正在运行)。

systemctl状态vncserver@1.service ubuntu 20.04

现在,TigerVNC服务器在端口5901上侦听。

sudo ss -lnpt | grep vnc

ubuntu 20.04 tigervncserver监听端口

步骤6:为鳄梨调味酱Web应用程序设置反向代理

Apache Tomcat正在8080端口上侦听。为了方便访问Guacamole Web应用程序,我们可以使用Apache或Nginx设置反向代理,因此最终用户将能够使用域名访问Web应用程序。 它还使我们能够轻松安装TLS证书来加密连接。

阿帕奇

如果您喜欢使用Apache,请从默认的Ubuntu软件存储库安装Apache。

sudo apt install apache2

要将Apache用作反向代理,我们需要启用 proxy 模块和标头模块。

sudo a2enmod proxy proxy_http headers proxy_wstunnel

然后为鳄梨调味酱创建虚拟主机文件。

sudo nano /etc/apache2/sites-available/guacamole.conf

在文件中添加以下行。 更换 guacamole.example.com 用您自己的域名。 记住要在DNS管理器中为子域创建一个A记录。 如果您没有真实域名,建议您到NameCheap购买。 价格低廉,终身免费提供Whois隐私保护。

<VirtualHost *:80>
      ServerName guacamole.example.com

      ErrorLog ${APACHE_LOG_DIR}/guacamole_error.log
      CustomLog ${APACHE_LOG_DIR}/guacamole_access.log combined

      <Location />
          Require all granted
          ProxyPass http://localhost:8080/guacamole/ flushpackets=on
          ProxyPassReverse http://localhost:8080/guacamole/
      </Location>

     <Location /websocket-tunnel>
         Require all granted
         ProxyPass ws://localhost:8080/guacamole/websocket-tunnel
         ProxyPassReverse ws://localhost:8080/guacamole/websocket-tunnel
     </Location>

     Header always unset X-Frame-Options
</VirtualHost>

保存并关闭文件。 测试语法。

sudo apachectl -t

如果Syntx正常,则启用此虚拟主机。

sudo a2ensite guacamole.conf

重新启动Apache

sudo systemctl restart apache2

现在,您可以通过访问Apache Guacamole登录页面 guacamole.example.com。 如果看到“无效请求”或类似的错误消息,则可能意味着Apache Tomcat无法绑定到端口8080,因为该端口已被服务器上的另一个进程占用。 您应该将其他进程配置为使用其他端口,然后重新启动Tomcat。

Nginx的

如果您喜欢使用Nginx,请从默认的Ubuntu软件存储库安装Nginx。

sudo apt install nginx

为鳄梨酱创建服务器阻止文件。

sudo nano /etc/nginx/conf.d/guacamole.conf

在文件中添加以下行。 更换 guacamole.example.com 用您自己的域名。 记住要在DNS管理器中为子域创建一个A记录。 如果您没有真实域名,建议您到NameCheap购买。 价格低廉,终身免费提供Whois隐私保护。

server {
        listen 80;
        listen [::]:80;
        server_name guacamole.example.com;

        access_log  /var/log/nginx/guac_access.log;
        error_log  /var/log/nginx/guac_error.log;

        location / {
                    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/ /;
        }

}

保存并关闭此文件。 然后测试Nginx配置。

sudo nginx -t

如果测试成功,请重新加载Nginx以使更改生效。

sudo systemctl reload nginx

现在,您可以通过访问Apache Guacamole登录页面 guacamole.example.com。 如果看到“无效请求”或类似的错误消息,则可能意味着Apache Tomcat无法绑定到端口8080,因为该端口已被服务器上的另一个进程占用。 您应该将其他进程配置为使用其他端口,然后重新启动Tomcat。

启用HTTPS

为了在访问Guacamole Web界面时对HTTP通信进行加密,我们可以通过安装由Let’s Encrypt颁发的免费TLS证书来启用HTTPS。 运行以下命令以在Ubuntu 20.04上安装Let’s Encrypt客户端(certbot)。

sudo apt install certbot

如果使用Apache,则需要安装Certbot Apache插件。

sudo apt install python3-certbot-apache

接下来,运行以下命令以获取并安装TLS证书。

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d guacamole.example.com

如果使用Nginx,则还需要安装Certbot Nginx插件。

sudo apt install python3-certbot-nginx

接下来,运行以下命令以获取并安装TLS证书。

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d guacamole.example.com

哪里:

  • --nginx:使用nginx插件。
  • --apache:使用Apache插件。
  • --agree-tos:同意服务条款。
  • --redirect:通过301重定向强制HTTPS。
  • --hsts:将Strict-Transport-Security标头添加到每个HTTP响应。 强制浏览器始终对域使用TLS。 防御SSL / TLS剥离。
  • --staple-ocsp:启用OCSP装订。 有效的OCSP响应被装订到服务器在TLS期间提供的证书。

现在应该获得证书并自动安装。

在Ubuntu 20.04 Server上设置Apache Guacamole远程桌面

您可以通过HTTPS访问Guacamole Web界面。 (https://guacamole.example.com)。

apache guacamole远程桌面登录页面

登录后,您将可以使用远程桌面。

gucamole xfce远程桌面

包起来

我希望本教程可以帮助您在Ubuntu 20.04服务器上设置Apache Guacamole远程桌面。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂

Sidebar