Глава 16. Доступ к Удалённому Рабочему столу при помощи VNC

RHEL9 может быть настроен на предоставление удалённого доступа к среде графического рабочего стола поверх сетевого или Интернет соединения. Хотя они по умолчанию не включены, отображение рабочего стола RHEL9 и доступ к нему из системы в любом ином месте в сетевой среде или через Интернет достаточно просты. Этого можно достичь вне зависимости от того, работает ли данная система под управлением Linux, Windows или macOS. Существуют даже приложения для Android и iOS, которые позволяют вам получать доступ к рабочему столу RHEL9 практически из любого места, из которого доступен сигнал данных.

Доступ к удалённому рабочему месту может быть полезен во множестве ситуаций. Например, он позволяет вам или иной персоне просматривать вашу среды рабочего стола RHEL9 и взаимодействовать с ней при помощи другой вычислительной системы в той же самой сетевой среде или через Интернет. Это полезно когда вам требуется работать за компьютером когда вы пребываете вдали от своего рабочего стола, например, путешествуете. Это также полезно когда коллеге или ИТ специалисту поддержки для решения проблемы требуется доступ к вашему рабочему столу.

Когда соответствующая система RHEL9 запущена в сервере на основе облачного решения, это также делает возможным доступ к её среде рабочего стола как альтернатива выполнению административных задач при помощи приглашения командной строки или веб консоли Cockpit.

Функциональность удалённого рабочего стола RHEL9 основывается на технологии с названием VNC (Virtual Network Computing, виртуальных сетевых вычислений). Данная глава рассматривает ключевые стороны настройки и применения удалённых рабочих мест внутри RHEL9.

Безопасный и лишённый безопасности доступ к Удалённому Рабочему столу

В данной главе будут обсуждены как безопасные так и не снабжённые безопасностью методы доступа к рабочему столу. В предположении что вы осуществляете доступ к одной системе из другой в рамках безопасной внутренней сетевой среды, использование лишённого средств безопасности метода доступа, в целом, надёжен. С другой стороны, если вы планируете выполнять доступ к своему рабочему месту удалённо через общедоступную сетевую среду, вы обязаны пользоваться безопасным методом доступа во избежание компрометации своих системы и данных.

Установка среды Рабочего стола GNOME

Естественно, доступ к среде рабочего стола возможен лишь тогда, когда установлен сам рабочий стол. Если, к примеру, изначально ваша система была настроена в качестве сервера, маловероятно что были установлены пакеты рабочего стола. Самый простой способ установки необходимых для запуска рабочего стола GNOME пакетов в выполнении групповой установки. Основным ключом к установке групп пакетов для включения определённой функциональной возможности выступает знание имени необходимой группы. На момент написания этих строк для установки среды рабочего стола в RHEL9 существуют две группы: "Server with GUI" and "Workstation". Поскольку названия групп обладают тенденцией к изменению от одного выпуска к другому, полезно знать что перечень групп, которые либо установлены, либо доступны, можно получить при помощи утилиты dnf следующим образом:


# dnf grouplist
Updating Subscription Management repositories.
Available Environment Groups:
   Server with GUI
   Minimal Install
   Workstation
   Custom Operating System
   Virtualization Host
Installed Environment Groups:
   Server
Installed Groups:
   Container Management
   Headless Management
Available Groups:
   Legacy UNIX Compatibility
   Graphical Administration Tools
   Smart Card Support
   RPM Development Tools
   .NET Development
   System Tools
   Development Tools
   Console Internet Tools
   Security Tools
   Network Servers
   Scientific Support
		

В приведённом выше примере группа среды Workstation перечисляется как доступная (и потому пока не установленной). Для нахождения дополнительных сведений относительно содержимого группы перед установкой воспользуйтесь такой командой:


# dnf groupinfo workstation
Updating Subscription Management repositories.
Environment Group: Workstation
 Description: Workstation is a user-friendly desktop system for laptops and PCs.
 Mandatory Groups:
   Common NetworkManager submodules
   Core
   Fonts
   GNOME
   Guest Desktop Agents
   Hardware Support
   Internet Browser
   Multimedia
   Printing Client
   Standard
   Workstation product core
   base-x
 Optional Groups:
   Backup Client
   GNOME Applications
   Headless Management
   Internet Applications
   Office Suite and Productivity
   Remote Desktop Clients
   Smart Card Support
		

Убедившись в том, что именно это нужная вам группа, её можно установить так:


# dnf groupinstall workstation
		

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


$ startx
		

Когда же, с другой стороны, данная система это сервер без непосредственно подключённого к ней дисплея, единственный способ запуска и доступа к её рабочему столу будет настройка в этой системе поддержки VNC.

Установка VNC в RHEL9

Доступ к удалённому рабочему столу требует установки в такой удалённой системе сервера VNC, средства просмотра VNC в той системе, с которой устанавливается доступ и, как вариант, безопасного соединения SSH. В то время как имеются доступными различные реализации сервера и средства просмотра VNC, Red Hat выполняет стандартизацию на TegerVNC, который предоставляет и компоненты сервера и средства просмотра для операционных систем на основе Linux. Клиенты средства просмотра VNC для не- Linux платформ включают RealVNC и TigerVNC.

Для установки в RHEL9 пакета сервера VNC выполните такую команду:


# dnf install tigervnc-server
		

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


# dnf install tigervnc
		

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

Настройка сервера VNC

Обладая установленными пакетами сервера VNV, наш следующий этап состоит в настройке этого сервера. Самый первый шаг состоит в определении пароля для пользователя этой среды удалённого рабочего стола. Будучи зарегистрированным как root, исполните команду vncpasswd (в которой имя пользователя предполагается установленным как demo):


# su - demo
[demo@demoserver ~]$ vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
[demo@demoserver ~]$ exit
#
		

Затем необходимо создать в каталоге /etc/systemd/system файл с названием vncserver@.service. Содержимое этого файла должно считываться аналогично отражённому ниже, при этом все экземпляры <USER> заменяются именем пользователя, указанным при установке пароля VNC:


[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking
WorkingDirectory=/home/<USER>
User=<USER>
Group=<USER>
ExecStartPre=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’
ExecStart=/usr/bin/vncserver -autokill %i
ExecStop=/usr/bin/vncserver -kill %i

Restart=on-success
RestartSec=15
[Install]
WantedBy=multi-user.target
		

После этого требуется настроить имеющийся межсетевой экран для предоставления внешнего доступа к нашему серверу VNC для удалённых экземпляров средств просмотра VNC, например:


# firewall-cmd --permanent --zone=public --add-port=5901/tcp
# firewall-cmd --reload
		

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


# systemctl daemon-reload
# systemctl start vncserver@:1.service
# systemctl enable vncserver@:1.service
		

Обратите внимание на то, что мы включаем в имя службы :1 для указания на то, что именно эта служба предназначена для дисплея с номером 1 сервера VNC. Это соответствует ранее открытому в нашем межсетевом экране порту 5901.

Убедимся следующим образом что наша служба успешно стартовала:


# systemctl status vncserver@:1.service
		

Если эта служба отказала при старте, выполните команду journalctl для проверки сообщений об ошибках:


# journalctl -xe
		

Кроме того, попробуйте это снова после перезапуска данной системы. Если данная служба продолжает отказывать, данный сервер VNC может быть запущен вручную через регистрацию предназначенного ей пользователя и запуска команды vncserver:


$ vncserver :1
		

Подключение к серверу VNC

Реализации средства просмотра VNC доступны для широкого диапазона операционных систем. Поэтому быстрый поиск в Интернете, скорее всего, снабдит вас множеством ссылок, содержащих подробные сведения о получении и установке данного инструмента в выбранной вами платформе.

В рабочем столе системы Linux, в которой установлено такое средство просмотра VNC как TigerVNC, соединение удалённого рабочего стола может быть установлено из окна Терминала следующим образом:


$ vncviewer <hostname>:<display number>
		

В приведённом выше примере <hostname> это либо имя хоста, либо IP адрес необходимой удалённой системы, а <display number> это номер дисплея его рабочего стола сервера VNC, например:


$ vncviewer 192.168.1.115:1
		

Как альтернатива, запуск этой команды без каких бы то ни было параметров выдаст приглашение на ввод этих подробностей необходимого удалённого сервера:

 

Рисунок 16-1


 

В поле сервера VNC введите имя хоста или IP адрес со следующим за ними номером дисплея (например, 192.168.1.115:1) и кликните по кнопке Connect. Для завершения процесса подключения средство просмотра выдаст приглашение на ввод пароля пользователя VNC и с этого момента появится содержащее удалённое рабочее место новое окно.

Данный раздел предполагает, что доступ к вашему удалённому рабочему столу осуществлялся из систем Linux или UNIX; те же самые этапы применимы для большинства прочих операционных систем.

Подключение к удалённому серверу VNC с применением шагов из данного раздела имеет результатом не шифруемое, не безопасное соединение между клиентом и сервером. Это означает, что передаваемые в процессе данного удалённого сеанса данные уязвимы к проникновению. Тем самым, для установления безопасного и зашифрованного соединения необходим ряд дополнительных шагов.

Установление Безопасного сеанса Удалённого Рабочего стола

Рассмотренная в данной главе конфигурация удалённого рабочего стола считается лишённой безопасности поскольку не применяется никакое шифрование. Это приемлемо когда когда удалённое соединение не расширяется вовне некой внутренней защитой межсетевым экраном. Однако, при необходимости удалённого сеанса поверх подключения через Интернет требуется более безопасный вариант. Это достигается посредством туннелирования вашего удалённого рабочего стола через соединение SSH (безопасной оболочки). Данный раздел будет рассматривать как это осуществляется в системах клиентов Linux, UNIX и macOS.

Обычно сервер SSH устанавливается и активируется в системах RHEL9 по умолчанию. Если это не так для вашей системы, отсылаем вас к Главе 15, Настройка в RHEL9 аутентификации на основе ключей SSH.

В предположении что ваш сервер SSH установлен и активен настало время перейти к другой системе. В другой системе зарегистрируйтесь при помощи приводимой ниже команды в своей удалённой системе, причём данная команда установит безопасный туннель между этими двумя системами:


$ ssh -l <username> -L 5901:localhost:5901 <remotehost>
		

В приведённой выше команде <username> ссылается на учётную запись пользователя той удалённой системы, к которой был настроен доступ VNC, а <remotehost> это либо имя хоста, либо IP адрес такой удалённой системы, например:


$ ssh -l neilsmyth -L 5901:localhost:5901 192.168.1.115
		

При получении приглашения на ввод зарегистрируйтесь при помощи пароля этой учётной записи. После установления безопасного соединения настало время запуска vncviewer для применения этого безопасного канала. Оставляя данный сеанс SSH запущенным в другом окне терминала, запустите другой терминал и введите такую команду:


$ vncviewer localhost:5901
		

Этот сеанс vncviewer выдаст приглашение на ввод пароля, если он необходим и затем запустит безопасный доступ средства просмотра VNC к вашей среде рабочего стола.

Хотя это соединение теперь безопасное и шифруемое, скорее всего, ваше средство просмотра VNC всё ещё будет сообщать что данное соединение не безопасно. Например, Рисунок 16-2 отражает предупреждающий диалог, отображаемый запущенным в системе macOS средством просмотра RealVNC:

 

Рисунок 16-2


 

К сожалению, несмотря на то, что данное соединение теперь безопасное, средство просмотра VNC не обладает способом узнать об этом и продолжает выдавать предупреждения. Тем не менее, будьте уверены, что пока применяется туннель SSH, это соединение и в самом деле безопасно.

В приведённом выше примере мы оставили свой сеанс туннеля SSH запущенным в окне терминала. Если вы предпочитаете запускать такой сеанс в фоновом режиме, этого можно достичь при помощи флагов -f и -N при инициализации данного соединения:


$ ssh -l <username> -f -N -L 5901:localhost:5901 <remotehost>
		

Приведённая выше команда выдаст приглашение на ввод пароля для этого удалённого сервера и затем установит соответствующее соединение в фоновом режиме, оставляя это окно терминала доступным для прочих задач.

Когда вы подключаетесь к своему удалённому рабочему столу извне имеющегося межсетевого экрана, имейте в виду, что значение IP адреса для такого соединения SSH будет значением внешнего IP адреса, предоставляемого вашим поставщиком Интернет услуг (ISP) или поставщиком облачного решения, а не IP адресом локальной сети вашей удалённой системы (поскольку такой IP адрес не виден за пределами такого межсетевого экрана). Таким образом, вам также потребуется настроить свой межсетевой экран для проброса порта 22 (для применяемого соединения SHH) в IP адрес той системы, в которой запущен рабочий стол. Нет необходимости пробрасывать порт 5900. Шаги выполнения перенаправления порта разнятся между межсетевыми экранами, а потому обратитесь к документации своего межсетевого экрана, маршрутизатора или базовой станции беспроводного подключения для подробностей именно вашей конфигурации.

Установление Безопасного туннеля в Windows при помощи PuTTY

Для установления безопасного сеанса рабочего стола из системы Windows к серверу RHEL9 предпринимается аналогичный подход. Допустим, у вас уже имеется установленным клиент VNC, например, TigerVNC, остаётся требование клиента SSH Windows (в данном случае PuTTY).

После того как PuTTY выгружен и установлен, самый первый шаг состоит в установлении безопасного соединения между системой Windows и системой RHEL9 с настроенным надлежащим образом туннелем. После своего запуска PuTTY отображает такой экран:

 

Рисунок 16-3


 

Введите значение IP адреса или имя хоста для своего удалённого хоста (или внешний IP адрес своего шлюза, когда подключаетесь извне своего межсетевого экрана). Следующий шаг состоит в настройке туннеля. Кликните по +, следующему за SSH в имеющемся дереве Category с левой стороны диалога и выберите Tunnels. Вслед за этим появится такой экран:

 

Рисунок 16-4


 

В качестве порта Source введите 5901, а в качестве Destination localhost:5901 и кликните кнопку Add. Наконец, вернитесь в своё главное окно и кликните категорию Session. Введите имя данного сеанса в текстовом поле Saved Sessions и нажмите Save. Для установления необходимого соединения кликните по Open. Появится окно терминала с приглашением для ввода пароля вашей удалённой системы. введите надлежащие учётные данные пользователя и пароля.

Теперь соединение SSH установлено. Запустите средство просмотра TigerVNC, введите в текстовом поле VNC Server localhost:5901 и кликните Connect. Ваше средство просмотра установит необходимое соединение, выдаст приглашение на ввод пароля и затем отобразит соответствующий рабочий стол. Теперь у вас имеется доступ к удалённому рабочему столу системы Linux из Windows поверх соединения безопасным туннелем SSH.

Останов Сеанса Рабочего стола

Для останова размещающего сеанс рабочего стола сервера VNC воспользуйтесь параметром командной строки -kill и номером того рабочего стола, работа с которым прекращается. Например, для уничтожения рабочего стола :1:


# vncserver –kill :1
		

Устранение неполадок подключений VNC

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

Когда сервер VNC отказывает в запуске, проверьте состояние systemctl данной службы и отыщите сообщения об ошибках:


# systemctl status vncserver@:1.service
		

Для более подробных сведений проверьте журнал systemd выполним команду journalctl:


# journalctl -xe
		

Дополнительные сведений могут быть доступными в файле регистрации, расположенном в /home/<username>/.vnc/<hostname>.<domain>:<display number>.log

Например, в /home/neilsmyth/.vnc/rhelserver01.localdomain:1.log

Если служба VNC systemd всё ещё отказывает в старте сервера VNC, попытайтесь запустить её вручную, воспользовавшись такой командой:


# vncserver :<display number>
		

Например:


# vncserver :1
		

Проверьте получаемый вывод и файл регистрации на предмет ошибок, что может помочь в выявлении имеющейся проблемы. Затем, когда сервер успешно запустится, снова попробуйте соединиться через средство просмотра VNC.

Когда ваш появившийся сервер VNC запущен, но попутки соединиться из средства просмотра завершаются отказом, может быть не лишним убедиться в корректности открытия портов межсетевого экрана. Начните с выявления установленной по умолчанию зоны следующим образом:


# firewall-cmd --get-default-zone
public
		

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


# firewall-cmd --permanent --zone=public --list-ports
5901/tcp 5900/tcp
		

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


# firewall-cmd --permanent --zone=public --add-port=<port number>/tcp
		

Заключение

Удалённый доступ к среде рабочего стола GNOME системы RHEL9 может быть включён при помощи VNC (Virtual Network Computing, виртуальных сетевых вычислений). Составляемый из запущенного в удалённой системе сервера VNC и соответствующего клиента в вашем локальном хосте, VNC обеспечивает удалённый доступ к множеству запущенных в сервере экземпляров рабочего стола.

При выполнении подключения VNC с применением общедоступного соединения, рекомендуется туннелирование SSH для гарантии того, что имеющееся между соответствующими клиентом и сервером взаимодействие шифруется и безопасно.