I. Обзор
1.1 Предыстория
Недавно я исследовал способ удаленного входа на сервер, который можно использовать для реализации функции входа в машину бастиона.Я обратил внимание на проект апача гуакамоле и записал здесь заметки об исследовании на потом использовать.
1.2 Что такое гуакамоле
guacamole — это веб-приложение HTML5, которое обеспечивает доступ к среде рабочего стола с использованием протоколов удаленного рабочего стола, таких как VNC или RDP. guacamole также является проектом, который создает это веб-приложение и предоставляет API для его управления. Этот API можно использовать для поддержки других подобных приложений или служб. «Гуакамоле» чаще всего используется для обозначения веб-приложений, созданных проектом «Гуакамоле» с использованием его API. Это веб-приложение является частью стека, который обеспечивает независимый от протокола шлюз удаленного рабочего стола. Клиентская часть гуакамоле написана на JavaScript с использованием только HTML5 и других стандартов, и для доступа к любому предоставленному настольному компьютеру требуется только современный веб-браузер или устройство с доступом в Интернет. Исторически Guacamole был клиентом HTML5 VNC, а до этого клиент Telnet для JavaScript назывался RealMint («RealMint» — это анаграмма для «терминала»), но это уже не так. Архитектура гуакамоле эволюционировала и теперь включает в себя удаленные рабочие столы и может использоваться в качестве шлюза для любого количества компьютеров. То, что начиналось как проверка концепции гуакамоле, теперь работает достаточно хорошо для повседневного использования, и все разработки гуакамоле выполняются на гуакамоле. В качестве API Guacamole предоставляет общий и эффективный способ потоковой передачи текстовых данных через туннель на основе JavaScript с использованием HTTP или WebSocket, а также реализацию на стороне клиента, которая поддерживает протокол Guacamole и взаимодействует с удаленными дисплеи могут быть отображены. туннель. Он обеспечивает кросс-браузерные события мыши и клавиатуры, экранную клавиатуру на основе XML и синхронизированные вложенные слои с аппаратным ускорением компоновки. Проекты, стремящиеся обеспечить поддержку удаленного рабочего стола через HTML5, могут использовать многолетний опыт исследований и разработок Guacamole, интегрируя API в свои приложения или службы.
1.3 Зачем использовать гуакамоле
Основная причина использования гуакамоле — иметь неограниченный доступ к вашему компьютеру по всему миру. Guacamole обеспечивает удаленный доступ к одному или нескольким рабочим столам из любого места без необходимости установки клиента, особенно если его невозможно установить. Настроив сервер гуакамоле, вы можете получить доступ к любому другому компьютеру в сети с любого другого компьютера в Интернете практически из любой точки мира. Даже телефон или планшет можно использовать без необходимости устанавливать что-либо. Как настоящее веб-приложение, которое обменивается данными только через HTTP или HTTPS, Guacamole позволяет вам получить доступ к вашему компьютеру из любого места, не нарушая политики рабочего места или устанавливая специальный клиент. Наличие прокси или корпоративного брандмауэра не помешает использовать гуакамоле.
1.4 Доступ к вашему компьютеру с любого устройства
Поскольку для гуакамоле требуется достаточно быстрый браузер, соответствующий стандартам, гуакамоле будет работать на многих устройствах, включая телефоны и планшеты. Гуакамоле специально разработан, чтобы не заботиться о том, есть ли у вас мышь, клавиатура, сенсорный экран или любая их комбинация. Одна из основных философий дизайна, стоящая за гуакамоле, заключается в том, чтобы никогда не предполагать, что у вас есть конкретное устройство (например, телефон) только потому, что в вашем браузере есть или отсутствует определенная функция (например, сенсорные события или маленький экран). Кодовая база Guacamole поддерживает события как мыши, так и касания, не требуя, чтобы одно выбирало другое, а интерфейс спроектирован таким образом, чтобы его можно было использовать независимо от размера экрана. Помимо ошибок, вы сможете использовать гуакамоле практически на любом современном устройстве с веб-браузером.
1.5 архитектура и анализ гуакамоле
Guacamole — это прокси-сервер удаленного рабочего стола, который предоставляет веб-приложения на основе HTML5. Используя сервер Guacamole, мы можем легко получить удаленный доступ к хосту прокси-сервера Guacamole в браузере, который является бесклиентским шлюзом удаленного рабочего стола. Поддерживает стандартные протоколы, такие как VNC, RDP, SSH. Он называется безклиентским, потому что не требует никаких плагинов и клиентского программного обеспечения. Благодаря HTML5 после установки гуакамоле на сервер вы можете получить доступ к своему рабочему столу через веб-браузер.
Мы можем получить доступ к странице гуакамоле в браузере.В это время браузер будет использовать протокол гуакамоле для подключения к веб-серверу на сервере гуакамоле через HTTP. Веб-приложение Guacamole считывает протокол Guacamole из запроса пользователя и перенаправляет его на guacd (локальный прокси-сервер Guacamole). Guacd подключается к серверу удаленного рабочего стола от имени пользователя на основе протокола Guacamole, пересылаемого веб-приложением. Когда веб-приложение Guacamole взаимодействует с guacd, ни одному из них не нужно знать, что такое фактический протокол удаленного рабочего стола, то есть он не зависит от протокола.
- Анализ схемы
Пользователь подключается к серверу гуакамоле через браузер Клиент, написанный на гуакамоле через JS, предоставляет услуги пользователю Связь между сервером и клиентом представляет собой частный протокол на основе HTTP, веб-приложение должно обрабатывать и пересылать контент клиента браузера. guacd является локальным прокси, протокол гуакамоле не связан с протоколом, предоставленным гуакд, и клиенту и веб-приложению гуакамоле не нужно знать, какой протокол работает.
- Протокол гуакамоле
Веб-приложению вообще не нужно понимать протокол удаленного рабочего стола, но оно должно понимать протокол гуакамоле (отображение удаленного дисплея и передача событий), а в качестве протокола удаленного отображения и взаимодействия гуакамоле представляет собой набор существующих протоколов удаленного подключения. Гуакамоле для поддержки нового протокола нужен только средний уровень следующего протокола «перевода».Это промежуточное программное обеспечение guacd.
- Guacd
guacd — это ядро динамической поддержки Guacamole нескольких протоколов удаленного рабочего стола (вместе называемых клиентскими плагинами) и веб-протоколов удаленного рабочего стола.guacd — это процесс-демон, установленный на Guacamole, который работает в фоновом режиме, ожидая подключения из Интернета. Также guacd не нужно понимать определенные протоколы удаленного рабочего стола, поскольку после запуска клиентского плагина он работает независимо от guacd и имеет полные разрешения для одноклассников с веб-приложением.
-
веб приложение
Веб-приложение — это компонент, доставляемый непосредственно пользователю.Веб-приложение не понимает протокол удаленного рабочего стола, но полагается на guacd; единственное, что может сделать веб-приложение, — это предоставить приятный веб-интерфейс и аутентификацию. Наше текущее веб-приложение написано на java, но его можно переписать на любой язык; Guacamole фокусируется на API.
- RealMint
Guacamole теперь является общим шлюзом удаленного рабочего стола, но не абсолютным.Guacamole начинался как чисто текстовый JS-клиент telnet под названием ReaMint, идея возникла из демонстрации и известна в основном тем, что написана на JS.
Туннель RealMint в основном написан на PHP. По сравнению с HTTP-туннелем Guacamole, туннель RealMint представляет собой просто длинный опрос и неэффективен. Тем не менее, клавиатурная часть RealMint хорошо реализована, и в настоящее время она поглощена гуакамоле, но также имеет низкую эффективность. Вот и все. .
- VNC-клиент
Как только разработчики освоят тег холста HTML5 и увидят, что он поддерживается Firefox и Chrome, некоторые люди захотят создать POC клиента JS VNC.Этот клиент реализован на чистом JS, и клиент использует JAVA, переводя VNC в версию XML. .Разработка клиента основана на функции самого VNC, а объем разработки ограничивается переадресацией одного соединения группе пользователей.Хотя скорость не очень высокая, ее достаточно для POC и требований проекта. , через гуакамоле на SourceForge.
- Шлюз удаленного рабочего стола
Разработка быстрого протокола на основе текстового протокола может представлять несколько протоколов удаленного управления.Вся система была перестроена в фоновом режиме, а объем проекта был расширен до клиента VNC и функций общего назначения, достаточных по сравнению с быстрый API протокола удаленного рабочего стола HTML5. Теперь Guacamole можно использовать в качестве центрального шлюза для подключения нескольких рабочих столов, работающих по разным протоколам. Он также обеспечивает расширяемую аутентификацию, конечно, требуется общий API, к которому можно получить доступ через HTML5.
Две установки и развертывания
Гуакамоле делится на две части, серверную и клиентскую, половина клиентской части использует sdk для интеграции кода или API для реализации вызовов в собственном бизнесе.
2.1 Скомпилируйте и установите сервер гуакамоле
Утилита guacenc, предоставляемая guacamole-server для преобразования записей экрана в видео, зависит от FFmpeg и может быть собрана только в том случае, если установлены как минимум библиотеки libavcodec, libavutil и libswscale, предоставляемые FFmpeg.
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum clean all
yum install epel-release -y
yum install -y freerdp-plugins gcc gnu-free-mono-fonts pv libjpeg-devel freerdp-devel libssh2-devel libvorbis-devel libwebp-devel pulseaudio-libs-devel libvncserver-devel libssh-devel pango-devel ffmpeg ffmpeg-devel openssl-devel dialog libtelnet-devel wget cairo-devel libpng-devel uuid-devel
yum localinstall http://sourceforge.net/projects/libjpeg-turbo/files/libjpeg-turbo-official-1.5.2.x86_64.rpm -y
ln -vfs /opt/libjpeg-turbo/include/* /usr/include/
ln -vfs /opt/libjpeg-turbo/lib??/* /usr/lib64/
cd /tmp
wget http://sourceforge.net/projects/guacamole/files/current/source/guacamole-server-0.9.14.tar.gz
tar -xvpf guacamole-server-0.9.14.tar.gz
cd guacamole-server-0.9.14
./configure --with-init-dir=/etc/init.d
make && make install
ldconfig
Три конфигурации гуакамоле
После установки Guacamole вам необходимо настроить пользователей и соединения, прежде чем Guacamole сможет работать. В этой главе описывается общая конфигурация гуакамоле и использование метода аутентификации по умолчанию.
Метод аутентификации по умолчанию гуакамоле считывает всех пользователей и соединения из файла с именем user-mapping.xml. Этот метод аутентификации предназначен для:
- Достаточно для небольших развертываний гуакамоле.
- Относительно простой способ проверить правильность настройки гуакамоле.
Независимо от используемого метода аутентификации, конфигурация Guacamole всегда состоит из двух основных частей: каталога с именем GUACAMOLE_HOME, который является основным местом поиска файлов конфигурации, и guacamole.properties, который является основным местоположением, используемым Guacamole и файлом конфигурации его расширений.
3.1 GUACAMOLE_HOME(/etc/guacamole)
GUACAMOLE_HOME — это имя каталога конфигурации Guacamole, который по умолчанию находится в /etc/guacamole. Все файлы конфигурации, расширения и т. д. находятся в этом каталоге. Структура GUACAMOLE_HOME строго определена и включает следующие необязательные файлы:
- guacamole.properties
Основной файл конфигурации для гуакамоле. Свойства в этом файле определяют, как гуакамоле подключается к guacd, и могут настраивать поведение установленных расширений проверки подлинности.
- logback.xml
guacamole использует систему ведения журналов под названием Logback для всех сообщений. По умолчанию Guacamole регистрируется только в консоли, но вы можете изменить это, указав свой собственный файл конфигурации Logback.
- extensions/
Место установки всех расширений гуакамоле. guacamole автоматически загрузит все файлы .jar в этом каталоге при запуске.
- lib/
Найдите в каталоге библиотеки, необходимые для расширения гуакамоле. guacamole сделает файлы .jar в этом каталоге доступными для всех расширений. Если вашему расширению требуются другие библиотеки, такие как драйверы базы данных, это подходящее место для их размещения.
обложкаGUACAMOLE_HOME
Если вы не можете или не хотите использовать /etc/guacamole для GUACAMOLE_HOME, вы можете переопределить это местоположение одним из следующих способов:
- Создайте каталог с именем .guacamole в домашнем каталоге пользователя, запускающего контейнер сервлетов. Если каталог существует, он будет автоматически использоваться для GUACAMOLE_HOME.
- Используйте переменную среды GUACAMOLE_HOME, чтобы указать полный путь к альтернативному каталогу. Обязательно ознакомьтесь с документацией вашего контейнера сервлетов, чтобы определить, как правильно установить переменные среды.
- Используйте системное свойство guacamole.home, чтобы указать полный путь к альтернативному каталогу.
3.2 guacamole.properties
-
Файл с именем guacamole.properties является основным файлом конфигурации, используемым веб-приложением Guacamole. Guacamole или другие его расширения могут найти все свойства конфигурации, прочитав этот файл.
В предыдущих выпусках этот файл должен был находиться в пути к классам контейнера сервлета. Теперь путь к guacamole.properties можно указать с помощью переменных среды или системных свойств, только путь к классам используется в крайнем случае. Когда Guacamole ищет guacamole.properties, он проверяет по порядку:
1. В GUACAMOLE_HOME, определенном выше.
2. В пути к классам контейнера сервлета.
Если конфигурация по умолчанию не соответствует требованиям, вам нужно только настроить файл guacamole.properties или предоставить дополнительную информацию о конфигурации для расширения. Вот некоторые стандартные свойства конфигурации:
**api-session-timeout**Время указано в минутах, что позволяет сеансу гуакамоле (токен аутентификации) оставаться действительным при отсутствии активности пользователя. Если этот параметр игнорируется, сеансы гуакамоле завершаются через 60 минут после бездействия.
**available-languages**Разделите белый список ключевых слов языка запятыми, которые являются языками, которые разрешено использовать в интерфейсе гуакамоле. Например: ограничить гуакамоле только английским и французским языками:
  available-languages: en, deЕсли файл перевода для соответствующего языка не найден, в качестве альтернативного языка будет использоваться английский. Отключайте английский язык в списке конфигурации только в том случае, если вы абсолютно уверены, что в нем нет пропущенных символов.
**guacd-host**Хост по умолчанию, на котором слушает демон агента гуакамоле. Если этот параметр опущен, гуакамоле по умолчанию будет прослушивать локальный хост.
**guacd-port**Порт по умолчанию, который слушает демон агента гуакамоле. Если этот параметр не указан, Guacamole по умолчанию будет прослушивать порт 4822.
**guacd-ssl**Если установлено значение «true», Guacamole будет использовать шифрование SSL/TLS между веб-приложением и guacd. По умолчанию соединение между веб-приложением и guacd не зашифровано.
Обратите внимание: если вы включите эту опцию, вы должны настроить guacd для использования SSL с опцией командной строки. Документация по этим параметрам находится в руководстве guacd. Вам нужен SSL-сертификат и закрытый ключ.
Example 5.1. Example
**guacamole.properties**# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port: 4822
3.3 Журналы веб-приложений
По умолчанию Guacamole регистрирует все журналы консоли. Контейнеры сервлетов, такие как Tomcat, будут автоматически перенаправлять эти сообщения в файл журнала, catalina.out при использовании Tomcat и только для чтения при запущенном Guacamole. Сообщения журнала делятся на четыре разных уровня в зависимости от важности и серьезности сообщения:
error
фатальная ошибка. Операция, описанная в журнале, не может быть продолжена Эта ошибка является серьезной проблемой, которую необходимо решить.
warn
Предупреждения обычно не фатальны. Операция может продолжать выполняться, но с заметной проблемой.
info
Главная Информация. Это может быть полезно или просто для привлечения внимания администратора, но обычно это не важные операции для сервера гуакамоле.
debug
Подробная отладочная информация для разработки. Почти вся отладочная информация содержит трассировку стека и внутреннюю информацию, которая может быть полезна при исследовании проблем в коде. Эти ожидаемые отладочные сообщения, хотя и являются подробными, не влияют на производительность.
trace
Информация трассировки и информация об отладке также преднамеренно являются подробными, но такая низкоуровневая и частая информация может повлиять на производительность. Информация на уровне трассировки необходима только тогда, когда информации очень мало, в основном для предоставления очень подробной информации при расследовании проблемы.
Сообщения журнала гуакамоле используют
Четыре конфигурации guacd
Вы можете записать содержимое конфигурации в системный файл /etc/guacd.conf.
[daemon]
pid_file = /var/run/guacd.pid
log_level = info
[server]
bind_host = localhost
bind_port = 4822
#
# The following parameters are valid only if
# guacd was built with SSL support.
#
[ssl]
server_certificate = /etc/ssl/certs/guacd.crt
server_key = /etc/ssl/private/guacd.key
Параметры конфигурации
| Section | Name | Description |
|---|---|---|
| daemon | pid_file | The name of the file in which the PID of the main guacd process should be written. This is mainly needed for startup scripts, which need to monitor the state of guacd, killing it if necessary. If this parameter is specified, the user running guacd must have sufficient permissions to create or modify the specified file, or startup will fail. |
| daemon | log_level | The maximum level at which guacd will log messages to syslog and, if running in the foreground, the console. If omitted, the default level of info will be used.Legal values are trace, debug, info, warning, and error. |
| server | bind_host | The host that guacd should bind to when listening for connections. If unspecified, guacd will bind to localhost, and only connections from within the server hosting guacd will succeed. |
| server | bind_port | The port that guacd should bind to when listening for connections. If unspecified, port 4822 will be used. |
| ssl | server_certificate | The filename of the certificate to use for SSL encryption of the Guacamole protocol. If this option is specified, SSL encryption will be enabled, and the Guacamole web application will need to be configured within guacamole.properties to use SSL as well. |
| ssl | server_key | The filename of the private key to use for SSL encryption of the Guacamole protocol. If this option is specified, SSL encryption will be enabled, and the Guacamole web application will need to be configured within guacamole.properties to use SSL as well. |
5 Использование гуакд
Гуакамоле обеспечивает доступ ко многим функциям рабочего стола из веб-браузера. Хотя большинство людей используют инструменты удаленного рабочего стола только в случае крайней необходимости, мы считаем, что гуакамоле должен быть основным средством доступа к рабочему столу, поэтому интерфейс должен быть как можно более плавным и ненавязчивым.
5.1 Home screen
После успешного входа в систему вы попадете на главный экран гуакамоле со списком всех доступных подключений или, если у вас есть доступ только к одному подключению, непосредственно к этому подключению. Главный экран будет содержать список всех подключений, к которым у вас есть доступ, а также эскизы всех недавно использованных или активных подключений. Если у вас есть доступ к большому количеству подключений и вы хотите быстро найти конкретное подключение, вы также можете ввести условие поиска в поле «Фильтр», чтобы отфильтровать список подключений по имени.
5.2 Client screen
После открытия соединения вы увидите удаленный дисплей в режиме реального времени. Вы можете взаимодействовать с этим дисплеем, как с обычным рабочим столом. Мышь и клавиатура работают так, как если бы они были напрямую подключены к удаленному компьютеру.