Найти в Дзене
Николай Калюжный

Установка Apache Guacamole в RHEL 9 с помощью ролей Ansible

Узнайте, как установить Apache Guacamole на RHEL 9 или CentOS 9 с помощью ролей Ansible для автоматизированного, безопасного и эффективного доступа к удаленному рабочему столу. Пошаговое руководство с примерами CLI. Apache Guacamole — это мощный шлюз удаленного рабочего стола без клиента, который позволяет получать доступ к рабочим столам или серверам с помощью веб-браузера. Будучи программным обеспечением с открытым исходным кодом, он поддерживает несколько протоколов, включая VNC, RDP и SSH. В этом посте вы узнаете, как установить Apache Guacamole на RHEL 9 или CentOS 9 с помощью ролей Ansible. Используя Ansible, вы можете автоматизировать развертывание и обеспечить согласованность в нескольких системах. В этом посте мы рассмотрим: Apache Guacamole — это веб-шлюз удаленного рабочего стола, поддерживающий несколько протоколов, в том числе: С помощью Guacamole вы можете получить доступ к любой машине (Windows, Linux и т. д.) с помощью браузера без необходимости использования какого-либ
Оглавление

Узнайте, как установить Apache Guacamole на RHEL 9 или CentOS 9 с помощью ролей Ansible для автоматизированного, безопасного и эффективного доступа к удаленному рабочему столу. Пошаговое руководство с примерами CLI.

Apache Guacamole — это мощный шлюз удаленного рабочего стола без клиента, который позволяет получать доступ к рабочим столам или серверам с помощью веб-браузера. Будучи программным обеспечением с открытым исходным кодом, он поддерживает несколько протоколов, включая VNC, RDP и SSH. В этом посте вы узнаете, как установить Apache Guacamole на RHEL 9 или CentOS 9 с помощью ролей Ansible. Используя Ansible, вы можете автоматизировать развертывание и обеспечить согласованность в нескольких системах.

В этом посте мы рассмотрим:

  • Что такое гуакамоле Apache и чем он полезен
  • Предварительные требования к установке
  • Как установить Apache Guacamole на RHEL 9 или CentOS 9 с помощью ролей Ansible
  • Настройка установки для оптимальной производительности
  • Устранение распространенных ошибок

Что такое Apache Guacamole?

Apache Guacamole — это веб-шлюз удаленного рабочего стола, поддерживающий несколько протоколов, в том числе:

  • RDP (протокол удаленного рабочего стола)
  • VNC (Virtual Network Computing)
  • SSH (безопасная оболочка)

С помощью Guacamole вы можете получить доступ к любой машине (Windows, Linux и т. д.) с помощью браузера без необходимости использования какого-либо клиентского программного обеспечения. Это особенно полезно в средах, где удаленный доступ к нескольким системам должен быть оптимизированным, безопасным и кроссплатформенным.

Почему гуакамоле из апачи?

  • Бесклиентский доступ: Доступ к рабочим столам осуществляется через браузер, что устраняет необходимость в трудоемкой установке на стороне клиента.
  • Кроссплатформенность: Он поддерживает несколько операционных систем и протоколов, поэтому вы можете подключиться практически к любой машине.
  • Безопасность: Используя веб-протоколы, вы можете легко интегрировать Guacamole с решениями безопасности корпоративного уровня.

Необходимые условия

Прежде чем приступить к процессу установки, убедитесь, что у вас есть следующие предварительные требования:

  • RHEL 9 / CentOS 9: Новая или существующая установка RHEL 9 или CentOS 9.
  • Привилегии Root/Sudo: Убедитесь, что у вас есть привилегии root или sudo для установки пакетов и настройки системных файлов.
  • Установлен Ansible: У вас уже должен быть установлен Ansible на локальном компьютере или узле управления.
  • Доступ в Интернет: Для загрузки зависимостей требуется доступ к Интернету.
Для этой демонстрации мы настроили наш экземпляр RHEL 9 следующим образом:HostnameRAMCoresOSansible.dev.kalyuzhnyy.ru (management node)
42Red Hat Enterprise Linux release 9.5 (Plow)guacamole.dev.kalyuzhnyy.ru(target) | IP: 192.168.1.155
84
Red Hat Enterprise Linux release 9.5 (Plow)Настройка ролей Ansible

Ansible использует структуру на основе ролей для организации задач в единицы, которые можно использовать повторно. В этом руководстве мы будем использовать существующую роль Ansible для установки Apache Guacamole. Если вы уже обновили свои системы и установили Ansible на узел управления, перейдите к шагу #3.

Шаг 1: Обновите свою машину

Рекомендуется убедиться, что ваши компьютеры исправлены и обновлены, прежде чем приступать к этой установке. Если ваши компьютеры уже пропатчены, пропустите этот шаг и перейдите к Шагу #2. Чтобы обновить и перезагрузить систему, выполните следующие команды:

sudo dnf update -y && sudo systemctl reboot

Шаг 2: Установка Ansible на RHEL 9 / CentOS 9

Если на узле управления еще не установлен Ansible, выполните следующие команды:

sudo dnf install epel-release -y && sudo dnf install ansible -y

Проверьте установку:

ansible --version

ansible [core 2.14.17]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/admin/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.9/site-packages/ansible
ansible collection location = /home/admin/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.9.21 (main, Dec 5 2024, 00:00:00) [GCC 11.5.0 20240719 (Red Hat 11.5.0-2)] (/usr/bin/python3)
jinja version = 3.1.2
libyaml = True

Шаг 3: Подготовьте среду

На узле управления начните с создания каталога для хранения сборников схем и ролей Ansible. Например, создайте директорию guacamole-rhel9.

mkdir -p ~/guacamole-rhel9 && cd ~/guacamole-rhel9

Внутри каталога guacamole-rhel9 создайте базовую структуру каталогов для размещения ролей Ansible с помощью следующей команды:

ansible-galaxy init guacamole

- Role guacamole was created successfully

Выполните команду tree для просмотра структуры каталогов:

tree guacamole

guacamole
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml

8 directories, 8 files

Шаг 4: Определите метаданные роли

В meta/main.yml вы должны определить метаданные роли, такие как зависимости и информация об авторе.

guacamole/meta/main.yml– использование предпочитаемого вами текстового редактора. Затем сохраните файл и закройте его. Повторите то же самое для других файлов YAML.

vim guacamole/meta/main.yml

galaxy_info: author: Your Name description: "An Ansible role to install and configure Apache Guacamole" company: Your Company (optional)

Шаг 5: Определите переменные по умолчанию

Файл defaults/main.yml будет содержать любые параметры конфигурации по умолчанию. Эти переменные могут быть переопределены другими частями сборника схем или инвентаря.

guacamole/defaults/main.yml

vim guacamole/defaults/main.yml

--- # defaults file for guacamole
# Default Guacamole configuration variables guacamole_java_package: "java-17-openjdk" guacamole_dependencies: - autoconf
- automake
- libtool
- epel-release
- git
- gcc
- gcc-c++ - make
- cairo
- cairo-devel
- libpng-devel
- libjpeg-devel
- libssh2-devel
- libvncserver-devel
- cmake
- libusb1-devel
- freerdp
- pango-devel guacamole_version: "1.5.5" # Can be set to a specific version if needed
# Define MySQL Database variables mysql_hostname: "127.0.0.1" mysql_port: "3306" mysql_database: "guacamole_db" mysql_username: "guacamole_user"

Важное примечание: В современном цифровом ландшафте обеспечение надежной защиты паролей имеет решающее значение. Чтобы соответствовать необходимым требованиям, замените mysql_password на свой уникальный пароль. Несоблюдение требований к паролю может привести к проблемам с вашим сборником схем, особенно в разделе, посвященном базе данных MySQL. Для справки рассмотрите приведенный ниже пример пароля, следуя этим рекомендациям.

КритерииОписаниеПримерДлинаПароль состоит из 12 символов, что часто считается хорошей минимальной длиной для безопасности.12 символовПрописные буквыОн включает в себя прописные буквы, которые увеличивают сложность и безопасность."Y", "O", "H", "V", "M," "X"Строчные буквыОн содержит строчные буквы, добавляющие разнообразия и силы."t", "q", "e"ЧислаОн включает в себя цифры, что затрудняет угадывание.“2”Специальные символыОн включает в себя специальный символ, который усиливает пароль за счет повышения непредсказуемости.“:”РазнообразиеПароль сочетает в себе различные типы символов (буквы, цифры, специальные символы) для повышения безопасности.Прописные, строчные буквы, цифры, специальный символ

Если вы устанавливаете политику паролей, рекомендуется убедиться, что она включает в себя сочетание этих элементов (прописные, строчные буквы, цифры и специальные символы) и соответствует требуемой длине для надежности.

Защита конфиденциальных данных (например, паролей)

  • Конфиденциальные данные (например, пароли) должны храниться в зашифрованном файле хранилища (secrets.yml), а не в виде обычного текста в vars/main.yml или defaults/main.yml.
  • Используйте vars_files в сборнике схем для ссылки на зашифрованный файл хранилища.
  • Всегда защищайте пароль своего хранилища и не фиксируйте его в системе контроля версий.

ansible-vault create guacamole/vars/secrets.yml

New Vault password:
Confirm New Vault password:

Вам будет предложено ввести и подтвердить пароль для безопасного доступа к файлу. Обязательно введите все конфиденциальные переменные, на которые необходимо ссылаться во время выполнения сборника схем. В этом примере мы включили пароль root для базы данных MySQL.

mysql_password: "tYOHVqe:r2MX"

Сохраните файл и закройте его. Кроме того, вам потребуется сохранить секретный пароль в скрытом файле vault-password, чтобы избежать запроса при каждом запуске сборника схем.

vim .vault-password

your-vault-password

Снова сохраните и закройте файл. Теперь перейдем к разделу основных задач. Мы вернемся к тому, как ссылаться на файл secrets.yml, в конце этого руководства, когда придет время запустить сборник схем.

Шаг 6: Определите задачи

Основные обязанности для этой роли изложены в файле tasks/main.yml, который содержит шаги по установке и настройке Guacamole. Задачи разделены на четыре раздела (и ссылка на secrets.yml), каждый из которых относится к отдельному компоненту, участвующему в настройке Guacamole в вашей системе RHEL 9 или CentOS 9:

В задачи входит:

  • install_dependencies.yml: Выполняет установку всех необходимых зависимостей пакета для установки и настройки Guacamole.
  • mysql_db_install.yml: Управляет установкой и конфигурацией базы данных MySQL.
  • guacamole.yml: Содержит основные задачи по установке и настройке сервера Guacamole и его функции.
  • firewall.yml: Обеспечивает открытость соответствующих сетевых портов для обеспечения бесперебойной работы и доступности гуакамоле.

Давайте начнем со ссылки на эти различные задачи в файле main.yml. Используя предпочитаемый текстовый редактор, откройте файл guacamole/tasks/main.yml и заполните его следующим содержимым:

vim guacamole/tasks/main.yml

--- # Main playbook for setting up Guacamole
- name: Install package dependencies include_tasks: install_dependencies.yml

- name: Set up MySQL Database include_tasks: mysql_db_install.yml

- name: Install and configure Guacamole server include_tasks: guacamole.yml

- name: Configure firewall settings include_tasks: firewall.yml

Далее давайте прополоскаем и повторим для файлов YAML, включенных в guacamole/tasks/main.yml:

install_dependencies.yml

vim guacamole/tasks/install_dependencies.yml

--- # tasks file for installing guacamole dependent packages - name: Install libuuid-devel dependency dnf: name: libuuid-devel state: present

- name: Install necessary dependencies for Guacamole dnf: name: "{{ item }}" state: present loop: "{{ guacamole_dependencies }}"

mysql_db_install.yml

Важное примечание: Плагин mysql_native_password устарел, начиная с версии MySQL 8.0.34. Он отключен по умолчанию в MySQL 8.4 и был полностью удален в MySQL 9.0.0. Это означает, что в будущем пользователям потребуется использовать более безопасные методы аутентификации, такие как caching_sha2_password, который является плагином аутентификации по умолчанию в MySQL 8.0 и более поздних версиях. Убедитесь, что при копировании и вставке содержимого используется правильный отступ. Неправильный отступ приведет к ошибкам в выполнении!!

Если вы используете MySQL 8.0.34 или более поздней версии и вам нужна поддержка старых клиентов или приложений, вам может потребоваться явно включить плагин mysql_native_password для определенных пользователей (что у нас есть в данном случае). Тем не менее, рекомендуется обновить свои приложения для поддержки более безопасного плагина caching_sha2_password, чтобы обеспечить совместимость с более новыми версиями MySQL.

--- # tasks for downloading, installing and provisioning MySQL Databases - name: Install python3-PyMySQL dnf: name: python3-PyMySQL state: present

- name: Download and install the MySQL repository package shell: | sudo dnf install -y https://dev.mysql.com/get/mysql84-community-release-el9-1.noarch.rpm
sudo dnf install -y mysql-community-server mysql-community-devel

- name: Start MySQL service service: name: mysqld state: started enabled: yes

- name: Get temporary root password from log command: "sudo grep 'temporary password' /var/log/mysqld.log" register: temp_root_password

- name: Extract the temporary password using regex set_fact: temp_password: "{{ (temp_root_password.stdout | regex_search('generated for root@localhost: (.+)', '\\1'))[0] }}"
- name: Debug the extracted password debug: msg: "Temporary password is: {{ temp_password }}"
- name: Check if /root/.my.cnf exists stat: path: /root/.my.cnf register: my_cnf_file

- name: Update MySQL root Password shell: | mysql -u root -p"{{ temp_password }}" --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '{{ mysql_password }}';" when: my_cnf_file.stat.exists == False

- name: Create the MySQL (my.cnf) config file copy: dest: /root/.my.cnf content: | [client] user=root password={{ mysql_password }}
- name: Append the MySQL Configuration file lineinfile: path: /etc/my.cnf line: "{{ item }}" loop: - "mysql_native_password=ON"
- name: Restart MySQL service service: name: mysqld state: restarted enabled: yes

- name: Remove anonymous MySQL users mysql_user: name: ''
host: '%' state: absent login_user: root login_password: "{{ mysql_password }}"
- name: Remove test database mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_password }}"
- name: Flush MySQL privileges mysql_query: query: "FLUSH PRIVILEGES;" login_user: root login_password: "{{ mysql_password }}"
- name: Ensure MySQL is running service: name: mysqld state: started enabled: yes

guacamole.yml

vim guacamole/tasks/guacamole.yml

--- # tasks file for installing and configuring guacamole
- name: Ensure guacamole database exists
mysql_db: name: guacamole_db
state: present
register: result_db

- name: Ensure guacamole user exists
mysql_user: name: guacamole_user
password: "{{ mysql_password }}" # Replace this with the desired password
priv: "guacamole_db.*:ALL" host: "localhost" state: present
register: result_user

- name: Install Java OpenJDK dnf: name: "{{ guacamole_java_package }}" state: present

- name: Install Apache Tomcat dnf: name: tomcat
state: present

- name: Start and enable Tomcat service
systemd: name: tomcat
state: started
enabled: yes

- name: Clone Guacamole server from GitHub shell: | if [ ! -d /opt/guacamole-server ]; then
git clone https://github.com/apache/guacamole-server.git /opt/guacamole-server
fi

- name: Run autoreconf to generate configure script
shell: autoreconf -fi
args: chdir: /opt/guacamole-server

- name: Build and install Guacamole server
shell: | cd /opt/guacamole-server
autoreconf -fi
./configure --with-init-dir=/etc/init.d --with-ssh --with-vnc --with-freerdp
make
sudo make install
args: creates: /usr/local/bin/guacd

- name: Clone FreeRDP Development Package from GitHub shell: | if [ ! -d /opt/FreeRDP ]; then
git clone https://github.com/FreeRDP/FreeRDP.git /opt/FreeRDP fi

- name: Build and install FreeRDP shell: | cd /opt/FreeRDP git checkout tags/2.10.0 cmake -DCMAKE_BUILD_TYPE=Release . make
sudo make install

- name: Ensure /etc/guacamole directory exists
file: path: /etc/guacamole
state: directory
mode: '0755'

- name: Create guacamole.properties file
template: src: guacamole.properties.j2
dest: /etc/guacamole/guacamole.properties

- name: Create user-mapping.xml file for user connections
template: src: user-mapping.xml.j2
dest: /etc/guacamole/user-mapping.xml

- name: Create guacd service file for systemd
template: src: guacd.service.j2
dest: /etc/systemd/system/guacd.service

- name: Update the system’s cache of installed libraries
shell: sudo ldconfig

- name: Create the required Guacamole directories
file: path: "/etc/guacamole/{{ item }}" state: directory
loop: - extensions
- lib

- name: Create the config file for guacd
copy: dest: /etc/guacamole/guacd.conf
content: | [daemon] pid_file = /var/run/guacd.pid
#log_level = debug

[server] #bind_host = localhost
bind_host = 127.0.0.1 bind_port = 4822
#[ssl] #server_certificate = /etc/ssl/certs/guacd.crt
#server_key = /etc/ssl/private/guacd.key

- name: Reload systemd to recognize new service
shell: | sudo systemctl daemon-reload

- name: Enable and start guacd service
systemd: name: guacd
enabled: yes
state: started

- name: Download Guacamole client WAR file
get_url: url: "https://downloads.apache.org/guacamole/{{ guacamole_version }}/binary/guacamole-{{ guacamole_version }}.war" dest: "/tmp/guacamole-{{ guacamole_version }}.war"
- name: Move the Guacamole WAR file to the Tomcat webapps directory
shell: sudo mv /tmp/guacamole-{{ guacamole_version }}.war /var/lib/tomcat/webapps/guacamole.war

- name: Check if MySQL Connector is installed
stat: path: /etc/guacamole/lib/mysql-connector-j.jar
register: mysql_connector_stat

- name: Remove existing symbolic link if it exists
file: path: /etc/guacamole/lib/mysql-connector-j.jar
state: absent
when: mysql_connector_stat.stat.exists

- name: Download MySQL Connector/J for Guacamole shell: | sudo dnf install -y https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-9.2.0-1.el9.noarch.rpm
cd /etc/guacamole/lib && sudo ln -s /usr/share/java/mysql-connector-j.jar

- name: Download JDBC auth plugin for Guacamole get_url: url: "https://downloads.apache.org/guacamole/{{ guacamole_version }}/binary/guacamole-auth-jdbc-{{ guacamole_version }}.tar.gz" dest: "/tmp/guacamole-auth-jdbc-{{ guacamole_version }}.tar.gz"
- name: Extract JDBC auth plugin
unarchive: src: "/tmp/guacamole-auth-jdbc-{{ guacamole_version }}.tar.gz" dest: "/tmp/" remote_src: yes

- name: Move the MySQL JDBC plugin to the extensions directory
shell: | sudo mv /tmp/guacamole-auth-jdbc-{{ guacamole_version }}/mysql/guacamole-auth-jdbc-mysql-{{ guacamole_version }}.jar /etc/guacamole/extensions/
- name: Append the MySQL properties to the guacamole.properties file
lineinfile: path: /etc/guacamole/guacamole.properties
line: "{{ item }}" loop: - "mysql-hostname: {{ mysql_hostname }}" - "mysql-port: {{ mysql_port }}" - "mysql-database: {{ mysql_database }}" - "mysql-username: {{ mysql_username }}" - "mysql-password: {{ mysql_password }}"
- name: Import the database schemas for Guacamole shell: | cat /tmp/guacamole-auth-jdbc-{{ guacamole_version }}/mysql/schema/*.sql | sudo mysql -u root -p'{{ mysql_password }}' guacamole_db --force
become: yes
become_user: root

- name: Configure SELinux contexts
shell: | sudo ausearch -c 'Catalina-utilit' --raw | audit2allow -M my-Catalinautilit sudo semodule -X 300 -i my-Catalinautilit.pp
sudo ausearch -c 'java' --raw | audit2allow -M my-java
sudo semodule -X 300 -i my-java.pp
sudo setsebool -P domain_can_mmap_files 1 sudo setsebool -P tomcat_can_network_connect_db 1 sudo /sbin/restorecon -v /var/lib/tomcat/webapps/guacamole.war

- name: Reload systemd once again
shell: | sudo systemctl daemon-reload

- name: Restart Tomcat and guacd services
systemd: name: "{{ item }}" state: restarted
loop: - tomcat
- guacd

- name: Clean up temporary files
file: path: "/tmp/{{ item }}" state: absent
loop: - "guacamole-auth-jdbc-{{ guacamole_version }}.tar.gz" - "guacamole-auth-jdbc-{{ guacamole_version }}"

firewall.yml

vim guacamole/tasks/firewall.yml

--- - name: Open multiple firewall ports and reload firewall shell: | sudo firewall-cmd --permanent --add-port={{ item }}/tcp
sudo firewall-cmd --reload with_items: - 8080 - 3306 - 5900 - 5901 - 3389 - 8443 - 22 # You can add more ports here as needed loop_control: loop_var: item # Customizing the loop variable name if necessary

Чтобы запустить Guacamole с функциями VNC, RDP и SSH, следующие порты должны быть открыты на брандмауэре, чтобы обеспечить надлежащую связь:

Порты для гуакамоле с VNC, RDP и SSH:

Дополнительные примечания:

ServicePortProtocolDescriptionGuacamole (HTTP)8080TCPDefault port for accessing the Guacamole web interface.Guacamole (HTTPS)8443TCPIf using HTTPS to secure the Guacamole web interface.VNC5900–5901 (or higher)TCPDefault port for VNC access. Typically, VNC server listens on port 5900 or 5901 for the first session.RDP3389TCPDefault port for RDP (Remote Desktop Protocol) connections.SSH22TCPDefault port for SSH (Secure Shell) connections.

  • Веб-интерфейс гуакамоле: Веб-интерфейс Guacamole обычно использует HTTP (порт 8080) или HTTPS (порт 8443). Убедитесь, что эти порты доступны с клиентских компьютеров.
  • VNC, RDP и SSH: Эти протоколы обеспечивают доступ к сеансам удаленного рабочего стола или терминала. Убедитесь, что соответствующие порты (перечисленные выше) открыты на сервере для каждого протокола.
  • Конфигурация межсетевого экрана: Возможно, вам потребуется настроить брандмауэр вашего сервера таким образом, чтобы разрешить трафик через эти порты, чтобы обеспечить правильную работу функций Guacamole.

Убедившись, что эти порты открыты, вы сможете получить доступ к VNC, RDP и SSH и использовать их через интерфейс Guacamole на вашем сервере.

Шаг 7: Добавьте обработчики (необязательно)

Обработчики используются для действий, которые должны выполняться при изменении определенных задач, таких как перезапуск служб:

vim guacamole/handlers/main.yml

--- # handlers file for guacamole
- name: restart guacd systemd: name: guacd state: restarted

- name: restart tomcat systemd: name: tomcat state: restarted

Шаг 8: Добавьте шаблоны

Каталог templates/ будет содержать шаблоны Jinja2 для таких файлов, как guacamole.properties и user-mapping.xml. Эти шаблоны будут использоваться для создания фактических файлов конфигурации на целевом компьютере.

guacamole/templates/guacamole.properties.j2

vim guacamole/templates/guacamole.properties.j2

guacd-hostname: localhost
guacd-port: 4822 user-mapping: /etc/guacamole/user-mapping.xml

guacamole/templates/user-mapping.xml.j2

Настройте этот файл в соответствии с конкретными потребностями вашей среды.

vim guacamole/templates/user-mapping.xml.j2

<user-mapping> <!-- User with VNC connection --> <authorize username="guacadmin" password="password"> <connection name="VNC-Desktop"> <protocol>vnc</protocol> <param name="hostname">192.168.1.10</param> <param name="port">5901</param> </connection> </authorize>
<!-- User with RDP connection --> <authorize username="guacadmin" password="password"> <connection name="Windows-Server"> <protocol>rdp</protocol> <param name="hostname">192.168.1.20</param> <param name="port">3389</param> <param name="username">Administrator</param> <param name="password">windows_password</param> </connection> </authorize>
<!-- User with SSH connection --> <authorize username="guacadmin" password="password"> <connection name="SSH-Server"> <protocol>ssh</protocol> <param name="hostname">192.168.1.30</param> <param name="port">22</param> <param name="username">root</param> <param name="password">ssh_password</param> </connection> </authorize> </user-mapping>

guacamole/templates/guacd.service.j2

В последних версиях Red Hat, включая RHEL 8 и CentOS 8 или выше, systemd заменил старый /etc/init.d для управления службами. В результате, нам нужно будет создать файл конфигурации для управления guacd.service с помощью systemctl. Это позволит нам управлять демоном Guacamole (guacd) с помощью systemd, обеспечивая надлежащий запуск, выключение и проверку состояния.

[Unit] Description=Guacamole Proxy Daemon Documentation=https://guacamole.apache.org/ After=network.target

[Service] Type=forking PIDFile=/run/guacd.pid ExecStart=/usr/local/sbin/guacd -p /run/guacd.pid ExecStop=/bin/kill -s TERM $MAINPID ExecReload=/bin/kill -s HUP $MAINPID Restart=on-failure User=root Group=root

[Install] WantedBy=multi-user.target

Шаг 9: Создание тестовых файлов

Вы можете определить тестовый сборник схем и инвентарь для проверки роли.

vim guacamole/tests/inventory

vim guacamole/tests/inventory

[guacamole_servers] 192.168.1.155 ansible_ssh_user=admin

guacamole/tests/test.yml

vim guacamole/tests/test.yml

--- - name: Test Guacamole Role hosts: guacamole_servers become: true roles: - guacamole

Шаг 10: Создайте и запустите сборник схем

Теперь вы можете создать guacamole_install.yml в корне проекта для выполнения роли. Вот как должна выглядеть структура каталогов:

.
├── guacamole
│ ├── defaults
│ │ └── main.yml
│ ├── files
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ │ └── main.yml
│ ├── README.md
│ ├── tasks
│ │ ├── firewall.yml
│ │ ├── guacamole.yml
│ │ ├── install_dependencies.yml
│ │ ├── main.yml
│ ├── templates
│ │ ├── guacamole.properties.j2
│ │ ├── guacd.service.j2
│ │ └── user-mapping.xml.j2
│ ├── tests
│ │ ├── inventory
│ │ └── test.yml
│ └── vars
│ │ ├── secrets.yml
│ │ └── main.yml
└── guacamole_install.yml

vim guacamole_install.yml

В guacamole_install.yml вы определяете узлы, роли и любые конкретные переменные, необходимые для запуска сборника схем (например, vars_files: secrets.yml).

--- - name: Install and configure Apache Guacamole hosts: guacamole_servers vars_files: - guacamole/vars/secrets.yml become: true roles: - guacamole

Чтобы выполнить сборник схем, выполните следующую команду:

ansible-playbook -i guacamole/tests/inventory guacamole_install.yml -K --vault-password-file .vault-password

BECOME password:

Вам будет предложено ввести пароль sudo для вашего пользователя ansible (например, admin для этой демонстрации). Введите свой пароль и нажмите клавишу [Enter], чтобы продолжить.

Шаг 11: Следите за установкой

Вы должны увидеть вывод, подобный следующему:

-2

Как только сборник схем будет завершен, Apache Guacamole будет установлен и запущен на вашем сервере.

Шаг 12: Проверьте установку

Чтобы убедиться в том, что Apache Guacamole установлен успешно:

  • Откройте браузер и перейдите по адресу http://<your-server-ip>:8080/guacamole
    Вы должны увидеть страницу входа в Apache Guacamole.
  • Войдите в систему, используя учетные данные по умолчанию (обычно guacadmin для имени пользователя и пароля.).
  • Войдя в систему, вы можете настроить удаленные подключения.
-3

Устранение неполадок

Услуга гуакамоле не начинается

Если Guacamole не запускается, вы можете проверить статус службы с помощью следующей команды:

sudo systemctl status guacd

Вы также можете проверить рабочее состояние tomcat с помощью следующей команды:

sudo systemctl status tomcat

Тем не менее, большинство проблем, с которыми вы сталкиваетесь, обычно можно диагностировать, выполнив команду journalctl или выполнив поиск в файле /var/log/messages записей, относящихся к Guacamole.

sudo journalctl -u guacd

sudo cat /var/log/messages | grep guac

Дополнительные ресурсы

Ресурс
Описание
Официальная документация Apache GuacamoleЭта страница содержит официальное руководство по использованию гуакамоле в Апаче.Документация AnsibleОтличный ресурс для исчерпывающей документации по Ansible. Он содержит руководства по установке, примеры и рекомендации.

Заключение

В этом руководстве описан процесс создания хорошо структурированной роли Ansible для установки Apache Guacamole на RHEL 9 или CentOS 9. Организуя роль с помощью отдельных директорий для задач, переменных, шаблонов и обработчиков, мы можем сделать плейбук более модульным, пригодным для повторного использования и обслуживания.

Шаги в этой роли будут:

  • Установите необходимые зависимости и Apache Tomcat.
  • Скачайте и соберите сервер Guacamole.
  • Настройте свойства Guacamole и настройте сопоставление пользователей для нескольких протоколов (VNC, RDP, SSH).

Использование ролей Ansible таким образом упрощает крупномасштабные развертывания, облегчая управление и обновление конфигураций. Была ли вам полезна эта статья? Ваш отзыв бесценен для нас!

Если у вас есть какие-либо мысли или вопросы по этой теме, пожалуйста, не стесняйтесь оставить комментарий или отправить мне сообщение. Я хотел бы продолжить дискуссию и услышать вашу точку зрения.

А также вы всегда можете поддержать меня зайдя на сайт и подписаться https://dzen.ru/kalyuzhnyy.ru и найти больше статей на моих ресурсах https://kalyuzhnyy.ru и https://dev.kalyuzhnyy.ru