В сегодняшнем выпуске моего блога я наглядно разберу как управлять системами только лишь через браузер задействовав технологию HTML 5. К удаленным системам я буду подключаться через таким всем известные и наиболее продуктивные способы, как: VNC & RDP, SSH
HTML 5 → Guacamole Server – (guacd):
- RDP
- VNC
- Other (SSH, как пример)
Основная система где развернуто ПО для этой заметке:
CPU = 2
RAM = 4 и тогда все работает, если RAM = 1 то никакого подключения к системам не будет только серый экран.
В основе этой заметке выступит приложение Guacamole позволяющее подключаться по протоколам RDP и VNC к удаленному рабочему столу, используя только браузер. Клиентская часть написана на JavaScript, выполнена с использованием технологий HTML5 и не требует для своей работы установки дополнительных плагинов. Серверная часть написана на Си и реализована через специальный прокси guacd. Взаимодействие прокси и web-приложения осуществляется при помощи прослойки на языке Java, которая может быть запущена под управлением контейнера сервлетов Apache Tomcat. Для реализации поддержки VNC используется библиотека libvncclient, а для RDP — FreeRDP
Первым делом обновляем систему до актуального состояния:
ekzorchik@srv-serv:~$ sudo apt-get update && sudo apt-get upgrade -y
ekzorchik@srv-mon:~$ apt-cache search guacamole
guacamole – HTML5 web application for accessing remote desktops
guacamole-tomcat – Tomcat-based Guacamole install with VNC support
guacd – Guacamole proxy daemon
libguac-client-vnc0 – VNC client plugin for Guacamole
libguac1 – Core Guacamole library used by guacd and client plugins
libguac1-dev – Development headers for the core Guacamole library
ekzorchik@srv-mon:~$ apt-cache show guacamole | grep Version
Version: 0.4.0-1
А на официальном сайте версия данного программного обеспечения есть сборки под мою систему Ubuntu 12.04.5 Server amd64 в виде deb пакетов (не особо рвусь к установке из исходников)
По приведенной ссылке можно скачать подготовленные пакеты для операционных систем
http://sourceforge.net/projects/guacamole/files/legacy/binary/
Из представленного вижу в прочем здесь нечему удивляться, версия находящяяся в репозитариях более старая, чем по этой ссылке, поэтому мой выбор более очевиден, скачиваю:
ekzorchik@srv-mon:~$ wget http://downloads.sourceforge.net/project/guacamole/legacy/binary/ubuntu-12.04-amd64/packages/guacamole_0.8.1-1_all.deb
ekzorchik@srv-mon:~$ wget http://sourceforge.net/projects/guacamole/files/legacy/binary/ubuntu-12.04-amd64/packages/libguac-client-vnc0_0.7.2-1_amd64.deb
ekzorchik@srv-mon:~$ wget http://sourceforge.net/projects/guacamole/files/legacy/binary/ubuntu-12.04-amd64/packages/guacd_0.7.0-2_amd64.deb
ekzorchik@srv-mon:~$ wget -c http://sourceforge.net/projects/guacamole/files/legacy/binary/ubuntu-12.04-amd64/packages/libguac-client-rdp0_0.7.4-1_amd64.deb
ekzorchik@srv-mon:~$ wget -c http://sourceforge.net/projects/guacamole/files/legacy/binary/ubuntu-12.04-amd64/packages/libguac4_0.7.0-1_amd64.deb
ekzorchik@srv-mon:~$ wget http://sourceforge.net/projects/guacamole/files/legacy/binary/ubuntu-12.04-amd64/packages/libguac-client-ssh0_0.8.0-1_amd64.deb
ekzorchik@srv-mon:~$ wget http://sourceforge.net/projects/guacamole/files/legacy/binary/ubuntu-12.04-amd64/packages/libguac-dev_0.7.0-1_amd64.deb
ekzorchik@srv-mon:~$ wget http://sourceforge.net/projects/guacamole/files/legacy/binary/ubuntu-12.04-amd64/packages/guacamole-tomcat_0.8.0-1_all.deb
Устанавливаю пакеты:
ekzorchik@srv-mon:~$ sudo dpkg –i *.deb
устраняю неустановленные зависимости:
ekzorchik@srv-mon:~$ sudo apt-get install -f –y
ekzorchik@srv-mon:~$ sudo apt-get update --fix-missing
ekzorchik@srv-mon:~$ sudo apt-get install -f –y
Теперь установка проходит без проблем.
ekzorchik@srv-mon:~$ sudo dpkg -i *.deb
Restart Tomcat server? Yes
Отлично двигаемся дальше, нужно разобрать, как настроить серверную часть и предопределить настройки, посредством которых будет происходить подключение к удаленным Windows система. Сейчас серверная часть guacamole работает по порту 8080 на адресе: http://localhost:8080/guacamole/
ekzorchik@srv-mon:~$ sudo netstat -tulpn | grep :8080
tcp6 0 0 :::8080 :::* LISTEN 2937/java
Далее предопределю аутентификационные данные для подключения к Web-интерфейсу guacamole, и также здесь можно будет указать настройки подключения, как к удаленному рабочему столу RDP, так и VNC, а также через ssh,telnet:
ekzorchik@srv-mon:~$ sudo nano /etc/guacamole/user-mapping.xml
<user-mapping>
<authorize username="ekzorchik" password="712mbddr@">
<!-- Connection srv-video -->
<connection name="srv-video">
<protocol>rdp</protocol>
<param name="hostname">192.168.0.172</param>
<param name="port">3389</param>
<param name="username">Администратор</param>
<param name="password">712mbddr@</param>
<param name="color-depth">16</param>
</connection>
<!--Connection srv-stunnel -->
<connection name="srv-stunnel">
<protocol>ssh</protocol>
<param name="hostname">192.168.0.9</param>
<param name="port">22</param>
<param name="username">aollo</param>
<param name="password">712mbddr@@@</param>
</connection>
</authorize>
</user-mapping>
Сохраняем внесенные изменения.
Теперь чтобы настройки применились нужно перезапустить службу – guacd:
ekzorchik@srv-mon:~$ sudo service guacd restart
* Restarting Guacamole proxy server guacd guacd[5234]: INFO: Guacamole proxy daemon (guacd) version 0.7.0
guacd[5234]: INFO: Unable to bind socket to host ::1, port 4822: Address family not supported by protocol
guacd[5234]: INFO: Successfully bound socket to host 127.0.0.1, port 4822
guacd[5234]: INFO: Exiting and passing control to PID 5235
guacd[5235]: INFO: Exiting and passing control to PID 5238
Сейчас задача в следующем, убрать префикс guacamole, чтобы при заходе на http://IP&DNS я подключался сразу в Web-интерфейс администрирования для этих целей я установлю в систему Web-сервер Apache2:
ekzorchik@srv-mon:~$ sudo apt-get install apache2 –y
ekzorchik@srv-mon:~$ sudo nano /etc/apache2/apache2.conf
ServerName srv-mon
ekzorchik@srv-mon:~$ sudo service apache2 restart
ekzorchik@srv-mon:~$ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/guacamole.conf
ekzorchik@srv-mon:~$ sudo unlink /etc/apache2/sites-available/default
ekzorchik@srv-mon:~$ sudo unlink /etc/apache2/sites-enabled/000-default
ekzorchik@srv-mon:~$ sudo a2ensite guacamole.conf
ekzorchik@srv-mon:~$ sudo service apache2 reload
ekzorchik@srv-mon:~$ sudo nano /etc/apache2/sites-available/guacamole.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName srv-mon
ProxyPass / http://192.168.0.129:8080/guacamole
# ProxyPassReverse / http://localhost:8080/guacamole
<Location />
Order allow,deny
Allow from all
</Location>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
ekzorchik@srv-mon:~$ sudo service apache2 restart
Syntax error on line 5 of /etc/apache2/sites-enabled/guacamole.conf:
Invalid command ‘ProxyRequests’, perhaps misspelled or defined by a module not included in the server configuration
Action ‘configtest’ failed.
The Apache error log may have more information.
…fail!
ekzorchik@srv-mon:~$ sudo a2enmod proxy
ekzorchik@srv-mon:~$ sudo a2enmod proxy_http
ekzorchik@srv-mon:~$ sudo service apache2 restart
При заходе на Web–интерфейс:
http://192.168.0.129 меня автоматически перенаправляет на http://192.168.0.129:8080/guacamole/
Если при вводе аутентификационных данных Вы получаете сообщение: Invalid login ,то следует смотреть логи:
ekzorchik@srv-mon:~$ sudo tail -f /var/log/tomcat6/catalina.2015-02-18.log
Feb 18, 2015 3:13:59 AM org.slf4j.impl.JCLLoggerAdapter warn
WARNING: Authentication attempt from 192.168.0.186 for user “null” failed.
Feb 18, 2015 3:14:47 AM org.slf4j.impl.JCLLoggerAdapter warn
WARNING: Authentication attempt from 192.168.0.186 for user “null” failed.
Feb 18, 2015 3:23:07 AM org.slf4j.impl.JCLLoggerAdapter info
INFO: Reading user mapping file: /etc/guacamole/user-mapping.xml
Feb 18, 2015 3:23:07 AM org.slf4j.impl.JCLLoggerAdapter warn
WARNING: Authentication attempt from 192.168.0.186 for user “ekzorchik” failed.
Feb 18, 2015 3:23:11 AM org.slf4j.impl.JCLLoggerAdapter warn
WARNING: Authentication attempt from 192.168.0.186 for user “admin” failed.
Смотрю еще раз файл настроек:
ekzorchik@srv-mon:~$ sudo nano /etc/guacamole/user-mapping.xml
и вижу, что да я задал пароль, но вот, он как и другие строки ответственные за подключение к система по RDP & VNC закомментированы (
начало комментария: <!—
Конец: –>
Поэтому убираю эти символы обрамляющие следующие строки:
<!-- Connection srv-video Это комментарий не удалять -->
<connection name="srv-video">
<protocol>rdp</protocol>
<param name="hostname">192.168.0.172</param>
<param name="port">3389</param>
<param name="username">Администратор</param>
<param name="password">712mbddr@</param>
<param name="color-depth">16</param>
</connection>
После сохраняю полученные изменения и перезапускаю службу:
ekzorchik@srv-mon:~$ sudo service guacd restart
* Restarting Guacamole proxy server guacd guacd[5315]: INFO: Guacamole proxy daemon (guacd) version 0.7.0
guacd[5315]: INFO: Unable to bind socket to host ::1, port 4822: Address family not supported by protocol
guacd[5315]: INFO: Successfully bound socket to host 127.0.0.1, port 4822
guacd[5315]: INFO: Exiting and passing control to PID 5316
guacd[5316]: INFO: Exiting and passing control to PID 5319
ekzorchik@srv-mon:~$ netstat -a --inet | grep :4822
tcp 0 0 localhost:4822 *:* LISTEN
На заметку: описание полей настройки подключения смотреть здесь:
http://guac-dev.org/doc/gug/configuring-guacamole.html
Для безопасности указанных данных используемых удаленным подключение через Web–интерфейс нужно защитить Ваши аутентификационные данные:
Было:
ekzorchik@srv-mon:~$ sudo ls -l /etc/guacamole/user-mapping.xml
-rw-r—– 1 root guacamole-web 1050 Feb 18 11:32 /etc/guacamole/user-mapping.xml
Стало:
ekzorchik@srv-mon:~$ sudo chown tomcat6:tomcat6 /etc/guacamole/user-mapping.xml
ekzorchik@srv-mon:~$ sudo chmod 640 /etc/guacamole/user-mapping.xml
Вместо пароль укажем использовать его хеш (чтобы не святить пароль в чистом виде)
ekzorchik@srv-mon:~$ echo -n 712mbddr@ | md5sum -t
0abfb9da12a2cf9ad423fccc9ded1cfc –
Теперь пробую авторизоваться через Web-интерфейс используя свой логин и пароль: login:ekzorchik,password=712mbddr@ – Ниже так выглядит Web-интерфейс управления удаленными подключениями:
В логах записи тому подтверждающие:
ekzorchik@srv-mon:~$ sudo tail -f /var/log/tomcat6/catalina.2015-02-18.log
Feb 18, 2015 4:39:35 AM org.slf4j.impl.JCLLoggerAdapter info
INFO: Reading user mapping file: /etc/guacamole/user-mapping.xml
Feb 18, 2015 4:39:35 AM org.slf4j.impl.JCLLoggerAdapter info
INFO: User “ekzorchik” successfully authenticated from 192.168.0.186.
Feb 18, 2015 4:39:35 AM org.slf4j.impl.JCLLoggerAdapter info
INFO: Login was successful.
Пробую подключиться к хосту: srv–stunnel и получаю сообщение:
Connected, waiting for first update..
А после надпись сменилась на
Connection closed
И в чем проблема???? Начинаю разбираться.
Оказывается у меня на системе не доустановлены пакеты осуществляющие удаленное взаимодействие с системами, исправляю это дело:
Guacamole currently supports VNC, RDP, SSH, and telnet. Each protocol corresponds to a separate library that will be built with guacamole-server if you have its corresponding optional dependencies
ekzorchik@srv-mon:~$ sudo apt-get install libfreerdp-dev libpango1.0-dev libssh2-1-dev libvncserver-dev libpulse-dev libssl-dev libvorbis-dev -y
После перезапускаю сервисы:
ekzorchik@srv-mon:~$ sudo service apache2 restart
ekzorchik@srv-mon:~$ sudo service tomcat6 restart
Снова подключаюсь на http://192.168.0.129 – авторизуюсь, выбираю подключение: srv–stunnel и получаю то к чему стремился:
По логам с 192.168.0.9 – я успешно авторизуюсь:
aollo@srv-stunnel:~$ cat /var/log/auth.log | grep aollo | grep 192.168.0.129
Feb 18 13:48:38 srv-stunnel sshd[2713]: Accepted password for aollo from 192.168.0.129 port 55638 ssh2
Feb 18 13:50:22 srv-stunnel sshd[3021]: Accepted password for aollo from 192.168.0.129 port 55640 ssh2
Feb 18 13:50:55 srv-stunnel sshd[3266]: Accepted password for aollo from 192.168.0.129 port 55643 ssh2
Feb 18 13:51:39 srv-stunnel sshd[3516]: Accepted password for aollo from 192.168.0.129 port 55647 ssh2
Но еще обнаружил один косяк – подключиться я подключился, а вот пытаюсь набрать команды и получаю – а ничего не получаю, ничего не реагирует, снова проблемы и снова логи:
ekzorchik@srv-mon:~$ sudo tail -f /var/log/syslog | grep guacd
Feb 18 05:44:05 srv-mon guacd[21008]: Protocol “rdp” selected
Feb 18 05:44:05 srv-mon guacd[21008]: Loading keymap “base”
Feb 18 05:44:05 srv-mon guacd[21008]: Loading keymap “en-us-qwerty”
Feb 18 05:44:05 srv-mon guacd[21008]: No available audio encoding. Sound disabled.
Feb 18 05:44:05 srv-mon guacd[21008]: Starting client
Feb 18 05:44:23 srv-mon guacd[21008]: Error reading instruction: Read timeout: Timeout while waiting for data on socket
Feb 18 05:44:23 srv-mon guacd[21008]: Client finished normally
А при подключении к Windows через RDP у меня серый экран:
Если же зайти удаленно на srv–video (192.168.0.172) вижу, что подключение прошло успешно:
Как так, вообщем опять читаю логи и документацию более внимательнее:
ekzorchik@srv-mon:~$ sudo nano +95 /etc/tomcat6/server.xml
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
ekzorchik@srv-mon:~$ sudo nano /etc/apache2/sites-available/guacamole.conf
ProxyPass / http://192.168.0.129:8080/guacamole max=20 flushpackets=on
ProxyPassReverse ajp://192.168.0.129:8009/guacamole max=20 flushpackets=on
ekzorchik@srv-mon:~$ sudo service apache2 reload
ekzorchik@srv-mon:~$ sudo service tomcat6 restart
ekzorchik@srv-mon:~$ sudo apt-get install libcairo2-dev libpng12-dev libossp-uuid-dev –y
Не помогло, может у меня просто старая версия: Guacamole 0.8.1 и из-за этого я испытываю сложности выше, поэтому снова в дело вступают исходники скачиваемой последней версии и проработка всех шагов по установки ее в систему:
Откатываю снапшот и начинаю заново:
ekzorchik@srv-mon:~$ sudo apt-get update && sudo apt-get upgrade –y
Устанавливаю в систему необходимые пакеты:
ekzorchik@srv-mon:~$ sudo apt-get install build-essential tomcat7 libpng12-dev libossp-uuid-dev libpulse-dev libcairo2-dev libssl-dev libvncserver-dev libvorbis-dev libssh2-1-dev libpango1.0-dev libfreerdp-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libvncserver-dev libpulse-dev libssl-dev libvorbis-dev libcairo2-dev libpng12-dev libossp-uuid-dev –y
Скачиваю пакеты guacamole последней версии – 0.9.4:
ekzorchik@srv-mon:~$ wget -O guacamole-server-0.9.4.tar.gz http://sourceforge.net/projects/guacamole/files/current/source/guacamole-server-0.9.4.tar.gz/download
ekzorchik@srv-mon:~$ wget -O guacamole-client-0.9.4.tar.gz http://sourceforge.net/projects/guacamole/files/current/source/guacamole-client-0.9.4.tar.gz/download
ekzorchik@srv-mon:~$ wget -O guacamole-0.9.4.war http://sourceforge.net/projects/guacamole/files/current/binary/guacamole-0.9.4.war/download
Распаковываю:
ekzorchik@srv-mon:~$ tar xfvz guacamole-server-0.9.4.tar.gz
ekzorchik@srv-mon:~$ tar xfvz guacamole-client-0.9.4.tar.gz
Собираю Guacamole Server:
ekzorchik@srv-mon:~/guacamole-server-0.9.4$ ./configure --with-init-dir=/etc/init.d
ekzorchik@srv-mon:~/guacamole-server-0.9.4$ make
ekzorchik@srv-mon:~/guacamole-server-0.9.4$ sudo make install
ekzorchik@srv-mon:~/guacamole-server-0.9.4$ cd ~/
ekzorchik@srv-mon:~$ sudo mkdir /usr/lib/x86_64-linux-gnu/freerdp/
ekzorchik@srv-mon:~$ sudo ln -s /usr/local/lib/freerdp/*.so /usr/lib/x86_64-linux-gnu/freerdp/
Далее копирую каталог war в каталог Tomcat:
ekzorchik@srv-mon:~$ sudo cp guacamole-0.9.4.war /var/lib/tomcat7/webapps/guacamole.war
ekzorchik@srv-mon:~$ sudo mkdir {/etc/guacamole,/usr/share/tomcat7/.guacamole}
ekzorchik@srv-mon:~$ sudo cp guacamole-client-0.9.4/guacamole/doc/example/{guacamole.properties,user-mapping.xml} /etc/guacamole/
ekzorchik@srv-mon:~$ sudo ln -s /etc/guacamole/guacamole.properties /usr/share/tomcat7/.guacamole/guacamole.properties
ekzorchik@srv-mon:~$ 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 $
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
basic-user-mapping: /etc/guacamole/user-mapping.xml
ekzorchik@srv-mon:~$ sudo nano /etc/guacamole/user-mapping.xml
<user-mapping>
<authorize username="ekzorchik" password="712mbddr@">
<!-- Connection srv-video -->
<connection name="srv-video">
<protocol>rdp</protocol>
<param name="hostname">192.168.0.172</param>
<param name="port">3389</param>
<param name="username">Администратор</param>
<param name="password">712mbddr@</param>
<param name="color-depth">16</param>
</connection>
<!--Connection srv-stunnel -->
<connection name="srv-stunnel">
<protocol>ssh</protocol>
<param name="hostname">192.168.0.9</param>
<param name="port">22</param>
<param name="username">aollo</param>
<param name="password">712mbddr@@@</param>
</connection>
</authorize>
</user-mapping>
ekzorchik@srv-mon:~$ sudo chown tomcat7:tomcat7 /etc/guacamole/user-mapping.xml
ekzorchik@srv-mon:~$ sudo chmod 600 /etc/guacamole/user-mapping.xml
ekzorchik@srv-mon:~$ sudo service tomcat7 restart
* Stopping Tomcat servlet engine tomcat7 [ OK ]
* Starting Tomcat servlet engine tomcat7 [ OK ]
ekzorchik@srv-mon:~$ sudo service guacd restart
Stopping guacd: SUCCESS (not running)
Starting guacd: /usr/local/sbin/guacd: error while loading shared libraries: libguac.so.9: cannot open shared object file: No such file or directory
FAIL
Доустанавливаю необходимую библиотеку:
ekzorchik@srv-mon:~$ sudo apt-get install libstdc++5
ekzorchik@srv-mon:~$ sudo service guacd stop
Stopping guacd: SUCCESS
ekzorchik@srv-mon:~$ sudo service guacd start
Starting guacd: guacd[30836]: INFO: Guacamole proxy daemon (guacd) version 0.9.4 started
SUCCESS
Вот теперь все хорошо.
Проверяю зайдя на Web-интерфейс
http://192.168.0.129:8080/guacamole/#/login/
Авторизовавшись получаю:
Также не могу вводить команды в консоли при подключении к серверу srv–stunnel и к Windows станции также серый экран.
БЛИН, что еще надо сделать
Добавил настройки подключения к Server 2008 R2 и подключение прошло
И правда все больше не куда…
Заметил у меня подключение не происходит видимо из-за недостатка памяти на системе
ekzorchik@srv-mon:~$ free -m
total used free shared buffers cached
Mem: 993 902 91 0 37 627
-/+ buffers/cache: 237 756
Swap: 1019 0 1019
Вижу что-то прогрузилось
И действительно увеличив количество оперативной памяти для виртуальной машины (где я сперва тестировал разворачивание Guacamole) все заработало сражу, как установка всего комплекса посредством deb пакетов, так из исходников. Вот так вот я методом ограничения ресурсов вывел для себя рекомендуемые требования для работы серверной части (не менее 1Gb памяти должно быть выделено системе, лучше больше). Для чего вообще вся эта заметка была описана, т. к. я в своей подконтрольной системе использую Zabbix с целью мониторинга контролируемой инфраструктуры, то заведя все ключевые сервисы на мониторинг, позже создав наглядную карту устройств (немного позже я покажу как это сделать, там нет ничего сложного), решил приспособить подключение посредством браузера к системам. А эта заметка полностью смогла реализовать мою задумку. (немного позже я покажу что я имею ввиду под этим в одной из своих заметок). Раз я все показал и наглядно продемонстрировал то буду прощаться, до встречи — с уважением автор блога — ekzorchik.