Глава 16. Доступ к Удалённому Рабочему столу при помощи VNC
Содержание
- Глава 16. Доступ к Удалённому Рабочему столу при помощи VNC
- Безопасный и лишённый безопасности доступ к Удалённому Рабочему столу
- Установка среды Рабочего стола GNOME
- Установка VNC в RHEL9
- Настройка сервера VNC
- Подключение к серверу VNC
- Установление Безопасного сеанса Удалённого Рабочего стола
- Установление Безопасного туннеля в Windows при помощи PuTTY
- Останов Сеанса Рабочего стола
- Устранение неполадок подключений VNC
- Заключение
RHEL9 может быть настроен на предоставление удалённого доступа к среде графического рабочего стола поверх сетевого или Интернет соединения. Хотя они по умолчанию не включены, отображение рабочего стола RHEL9 и доступ к нему из системы в любом ином месте в сетевой среде или через Интернет достаточно просты. Этого можно достичь вне зависимости от того, работает ли данная система под управлением Linux, Windows или macOS. Существуют даже приложения для Android и iOS, которые позволяют вам получать доступ к рабочему столу RHEL9 практически из любого места, из которого доступен сигнал данных.
Доступ к удалённому рабочему месту может быть полезен во множестве ситуаций. Например, он позволяет вам или иной персоне просматривать вашу среды рабочего стола RHEL9 и взаимодействовать с ней при помощи другой вычислительной системы в той же самой сетевой среде или через Интернет. Это полезно когда вам требуется работать за компьютером когда вы пребываете вдали от своего рабочего стола, например, путешествуете. Это также полезно когда коллеге или ИТ специалисту поддержки для решения проблемы требуется доступ к вашему рабочему столу.
Когда соответствующая система RHEL9 запущена в сервере на основе облачного решения, это также делает возможным доступ к её среде рабочего стола как альтернатива выполнению административных задач при помощи приглашения командной строки или веб консоли Cockpit.
Функциональность удалённого рабочего стола RHEL9 основывается на технологии с названием VNC (Virtual Network Computing, виртуальных сетевых вычислений). Данная глава рассматривает ключевые стороны настройки и применения удалённых рабочих мест внутри RHEL9.
В данной главе будут обсуждены как безопасные так и не снабжённые безопасностью методы доступа к рабочему столу. В предположении что вы осуществляете доступ к одной системе из другой в рамках безопасной внутренней сетевой среды, использование лишённого средств безопасности метода доступа, в целом, надёжен. С другой стороны, если вы планируете выполнять доступ к своему рабочему месту удалённо через общедоступную сетевую среду, вы обязаны пользоваться безопасным методом доступа во избежание компрометации своих системы и данных.
Естественно, доступ к среде рабочего стола возможен лишь тогда, когда установлен сам рабочий стол. Если, к примеру, изначально ваша система была настроена в
качестве сервера, маловероятно что были установлены пакеты рабочего стола. Самый простой способ установки необходимых для запуска рабочего стола 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, средства просмотра VNC в той системе, с которой устанавливается доступ и, как вариант, безопасного соединения SSH. В то время как имеются доступными различные реализации сервера и средства просмотра VNC, Red Hat выполняет стандартизацию на TegerVNC, который предоставляет и компоненты сервера и средства просмотра для операционных систем на основе Linux. Клиенты средства просмотра VNC для не- Linux платформ включают RealVNC и TigerVNC.
Для установки в RHEL9 пакета сервера VNC выполните такую команду:
# dnf install tigervnc-server
Если это необходимо, средство просмотра TigerVNC также может быть установлено следующим образом:
# dnf install tigervnc
После того как сервер установлен, вашу систему требуется настроить для запуска одной или более служб 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 доступны для широкого диапазона операционных систем. Поэтому быстрый поиск в Интернете, скорее всего, снабдит вас множеством ссылок, содержащих подробные сведения о получении и установке данного инструмента в выбранной вами платформе.
В рабочем столе системы Linux, в которой установлено такое средство просмотра VNC как TigerVNC, соединение удалённого рабочего стола может быть установлено из окна Терминала следующим образом:
$ vncviewer <hostname>:<display number>
В приведённом выше примере <hostname> это либо имя хоста, либо IP адрес необходимой удалённой системы, а <display number> это номер дисплея его рабочего стола сервера VNC, например:
$ vncviewer 192.168.1.115: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:
К сожалению, несмотря на то, что данное соединение теперь безопасное, средство просмотра 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 к серверу RHEL9 предпринимается аналогичный подход. Допустим, у вас уже имеется установленным клиент VNC, например, TigerVNC, остаётся требование клиента SSH Windows (в данном случае PuTTY).
После того как PuTTY выгружен и установлен, самый первый шаг состоит в установлении безопасного соединения между системой Windows и системой RHEL9 с настроенным надлежащим образом туннелем. После своего запуска PuTTY отображает такой экран:
Введите значение IP адреса или имя хоста для своего удалённого хоста (или внешний IP адрес своего шлюза, когда подключаетесь извне своего межсетевого экрана). Следующий шаг состоит в настройке туннеля. Кликните по +, следующему за SSH в имеющемся дереве Category с левой стороны диалога и выберите Tunnels. Вслед за этим появится такой экран:
В качестве порта 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 отказывает в запуске, проверьте состояние 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 для гарантии того, что имеющееся между соответствующими клиентом и сервером взаимодействие шифруется и безопасно.