在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
步骤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
如果您有其他软件在端口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个字符。 然后,您可以选择是否需要查看密码。
现在,您应该编辑 /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服务器失败,如下所示:
然后,您可以手动创建文件。
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]
如您所见,它处于活动状态(正在运行)。
现在,TigerVNC服务器在端口5901上侦听。
sudo ss -lnpt | grep vnc
步骤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期间提供的证书。
现在应该获得证书并自动安装。
您可以通过HTTPS访问Guacamole Web界面。 (https://guacamole.example.com)。
登录后,您将可以使用远程桌面。
包起来
我希望本教程可以帮助您在Ubuntu 20.04服务器上设置Apache Guacamole远程桌面。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂