Установка и настройка VNC в Ubuntu 20.04

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

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

Требования

  • Сервер Ubuntu 20.04, настроенный по этому мануалу.
  • Локальный компьютер с предустановленным клиентом VNC, который поддерживает VNC-соединения через SSH-туннель. Пользователи Windows могут установить TightVNC, RealVNC или UltraVNC. Пользователи MacOS могут обратиться к встроенному пакету Screen Sharing или использовать кроссплатформенные приложения (например, RealVNC). Пользователи Linux могут выбрать vinagre, krdc, RealVNC, TightVNC и т.п.

1: Установка среды рабочего стола и сервера VNC

По умолчанию серверы Ubuntu 20.04 поставляются без предустановленной графической среды рабочего стола и сервера VNC. Потому сначала нужно установить эти компоненты.

У вас есть много доступных вариантов, но в данном мануале используются пакеты Xfce и TightVNC, доступные в официальном репозитории Ubuntu. Оба эти пакета популярны благодаря своей компактности и скорости, что сделает ваше VNC-соединение бесперебойным и стабильным даже при медленном интернете.

Подключившись к серверу по SSH, обновите индекс пакетов:

sudo apt update

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

sudo apt install xfce4 xfce4-goodies

Во время установки вам может быть предложено выбрать дисплейный менеджер по умолчанию для Xfce. Дисплейный менеджер – это программа, которая позволяет входить в среду рабочего стола через графический интерфейс. Вы будете использовать Xfce только при подключении к клиенту VNC, где вы уже будете зарегистрированы как пользователь sudo. Следовательно, для целей данного мануала ваш выбор не имеет значения. Выберите один из вариантов и нажмите Enter.

Теперь установите TightVNC:

sudo apt install tightvncserver

Чтобы завершить начальную настройку сервера VNC после его установки и выбрать надёжный пароль, используйте команду vncserver.

vncserver

Команда предложит выбрать и подтвердить пароль:

You will require a password to access your desktops.
Password:
Verify:

Пароль должен включать от шести до восьми символов. Более длинные пароли будут автоматически сокращены до 8 символов.

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

Затем будут созданы необходимые конфигурационные файлы по умолчанию и информация о соединении. Кроме того, по умолчанию VNC запускает экземпляр сервера на порт 5901. Этот порт называется дисплейным портом, VNC ссылается на него как :1. VNC может запускать несколько экземпляров на других дисплейных портах, при этом ссылаясь на порт 5902 как :2, на порт 5903 как на :3 и так далее.

Would you like to enter a view-only password (y/n)? n
xauth:  file /home/8host/.Xauthority does not exist
New 'X' desktop is your_hostname:1
Creating default startup script /home/8host/.vnc/xstartup
Starting applications specified in /home/8host/.vnc/xstartup
Log file is /home/8host/.vnc/your_hostname:1.log

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

vncpasswd

На этом этапе VNC-сервер установлен и запущен. Теперь давайте настроим его для запуска Xfce и получим доступ к серверу через графический интерфейс.

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

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

Эти команды должны находиться в файле xstartup в каталоге .vnc, который хранится в домашнем каталоге текущего пользователя. Скрипт запуска был создан командой vncserver на этапе установки, но вам нужно создать пользовательский скрипт для взаимодействия с Xfce.

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

vncserver -kill :1

Команда вернёт такое сообщение (ваш PID будет отличаться):

Killing Xtightvnc process ID 17648

Создайте резервную копию файла xstartup:

mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

Затем создайте новый файл xstartup с помощью текстового редактора:

nano ~/.vnc/xstartup

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

#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

Первая строка – это шебанг. В исполняемых текстовых файлах на платформах *nix шебанг сообщает системе, какому интерпретатору передать этот файл для выполнения. В этом случае файл передается интерпретатору Bash. Это позволит по порядку выполнять все последующие строки как команды.

При помощи первой команды, xrdb $HOME/.Xresources, GUI сервера VNC читает файл .Xresources. Здесь пользователь может вносить изменения в некоторые настройки графического рабочего стола (настраивать цвета терминала, темы курсора, шрифты). Вторая команда просто запускает Xfce, в котором хранится все графическое программное обеспечение, необходимое для управления сервером.

Теперь нужно сделать файл исполняемым:

chmod +x ~/.vnc/xstartup

Перезапустите VNC:

vncserver -localhost

Обратите внимание, команда включает опцию -localhost, которая связывает VNC-сервер с loopback интерфейсом вашего сервера. Это приведет к тому, что VNC будет разрешать подключения только с сервера, на котором он установлен.

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

Вы получите такой вывод:

New ‘X’ desktop is your_hostname:1

Starting applications specified in /home/8host/.vnc/xstartup
Log file is /home/8host/.vnc/your_hostname:1.log

3: Безопасное подключение к VNC

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

На локальном компьютере создайте соединение SSH, которое перейдет в localhost соединение для VNC. Вы можете сделать это в Linux или macOS через терминал с помощью следующей команды:

ssh -L 59000:localhost:5901 -C -N -l 8host your_server_ip

Давайте подробнее рассмотрим опции:

  • Флаг -L указывает привязки портов. В этом случае мы привязываем порт 5901 удаленного подключения к порту 5901 на локальном компьютере. Обратите внимание, мы указали произвольный локальный порт; если у вас этот порт еще не связан с другим сервисом, вы можете использовать его в качестве порта переадресации для своего туннеля.
  • Флаг -C включает сжатие, что позволяет уменьшить потребление ресурсов и повышает скорость.
  • Флаг -N сообщает ssh, что выполнять удаленную команду не нужно. Эта опция удобна, если вам нужно просто перенаправить порты.
  • Параметр -l указывает имя пользователя для удаленного входа. Не забудьте заменить 8host и your_server_ip своими данными.

Примечание: Эта команда устанавливает SSH-туннель, который перенаправляет информацию с порта 5901 на VNC-сервере на порт 59000 на локальном компьютере через порт 22 на каждом компьютере (это порт SSH по умолчанию). Если вы включили UFW, вам нужно добавить правило, разрешающее подключения к вашему серверу через OpenSSH. Это более безопасно, чем просто открывать порт в брандмауэре, чтобы разрешить подключения к порту 5901, поскольку это позволит любому пользователю получить доступ к вашему серверу через VNC. Подключаясь через SSH-туннель, вы ограничиваете доступ к VNC теми машинами, которые уже имеют SSH-доступ к вашему серверу.

Если вы работаете через графический SSH-клиент, например, PuTTY, вы можете создать туннель, кликнув правой кнопкой мыши по верхней панели терминала и выбрав Change Settings…

Найдите ветку Connection в меню в левой части окна Reconfiguration. Разверните ветку SSH и нажмите Tunnels. На экране Options controlling SSH port forwarding укажите 59000 в качестве Source Port и localhost:5901 в качестве Destination.

Затем нажмите кнопку Add, а после этого нажмите Apply, чтобы создать туннель.

После запуска туннеля используйте клиент VNC для подключения к localhost:59000. Вам будет предложено пройти аутентификацию с помощью пароля, который вы установили в разделе 1.

Как только вы подключитесь, вы увидите стандартный рабочий стол Xfce. Вы можете получить доступ к файлам в вашем домашнем каталоге с помощью файлового менеджера или из командной строки.

Нажмите CTRL+C в локальном терминале, чтобы остановить туннель SSH и вернуться в обычную командную строку. Эта комбинация клавиш также завершит сессию VNC.

Теперь вы можете настроить VNC-сервер как сервис systemd.

4: Настройка VNC как сервиса systemd

Теперь нужно настроить сервер VNC как сервис system. Это позволит вам управлять сервером при помощи простых команд, а также добавить его в автозагрузку.

Создайте новый юнит-файл /etc/systemd/system/vncserver@.service:

sudo nano /etc/systemd/system/vncserver@.service

Символ @ в конце имени файла позволит вам передать аргумент, который можно использовать в конфигурации сервиса. С его помощью можно указать порт VNC, который нужно использовать при управлении сервисом.

Добавьте в файл следующие строки. Обязательно измените значение User, Group, WorkingDirectory и имя пользователя в значении PIDFILE.

[Unit] Description=Start TightVNC server at startup
After=syslog.target network.target
[Service] Type=forking
User=8host
Group=8host
WorkingDirectory=/home/8host
PIDFile=/home/8host/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install] WantedBy=multi-user.target

Команда ExecStartPre останавливает VNC, если сервис уже запущен. Команда ExecStart запускает VNC и устанавливает глубину цвета – 24-битный цвет с разрешением 1280×800. Вы также можете изменить эти параметры в зависимости от потребностей. Обратите внимание, что команда ExecStart также включает опцию –localhost.

Сохраните и закройте файл.

Затем сообщите системе про новый юнит-файл.

sudo systemctl daemon-reload

И включите его:

sudo systemctl enable vncserver@1.service

Цифра 1, идущая за @, определяет, какой номер дисплея должен отображаться в сервисе, в этом случае это значение по умолчанию :1.

Остановите текущий экземпляр сервера VNC, если он еще запущен.

vncserver -kill :1

Теперь попробуйте запустить его как любой другой сервис systemd:

sudo systemctl start vncserver@1

Чтобы убедиться, что сервер запущен, проверьте его состояние:

sudo systemctl status vncserver@1
vncserver@1.service - Start TightVNC server at startup
Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-05-07 17:23:50 UTC; 6s ago
Process: 39768 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2)
Process: 39772 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS)
Main PID: 39795 (Xtightvnc)
...

Теперь сервис VNC добавлен в автозагрузку и вы можете управлять им при помощи стандартных команд systemctl.

Читайте также: Управление сервисами и юнитами Systemd с помощью Systemctl

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

ssh -L 59000:localhost:5901 -C -N -l 8host your_server_ip

Создайте новое подключение с клиента VNC на localhost:59000, чтобы протестировать настройку.

Заключение

Теперь на сервере Ubuntu 20.04 установлен сервер VNC. С его помощью вы можете управлять файлами, программами и настройками удалённого сервера (например, удаленно запускать веб-браузер).

Tags: , , ,

Добавить комментарий