vnc_сервера_на_ubuntu_22.04

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

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

По умолчанию, в сервере Ubuntu 22.04 нет графической среды. В этом руководстве, установим пакеты последней версии среды рабочего стола Xfce и пакет TightVNC, доступный в официальном репозитории Ubuntu.

sudo apt install xfce4 xfce4-goodies

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

Далее установим TightVNC сервер:

sudo apt install tightvncserver -y

После установки, запустим команду vncserver, чтобы установить пароль доступа к VNC, создать начальные файлы конфигурации и запустить экземпляр сервера VNC:

vncserver

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

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

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

xauth:  file /home/username/.Xauthority does not exist
 
New 'X' desktop is hostname:1
 
Creating default startup script /home/username/.vnc/xstartup
Starting applications specified in /home/username/.vnc/xstartup
Log file is /home/username/.vnc/slave1:1.log

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

vncpasswd

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

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

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

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

vncserver -kill :1
 
Killing Xtightvnc process ID 1933

Перед изменением файла xstartup сделайте резервную копию оригинала:

cp ./.vnc/xstartup{,.origin}

Далее редактируем ./.vnc/xstartup:

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

Где:

  • xrdb $HOME/.Xresources – сообщает графическому интерфейсу VNC, что нужно прочитать пользовательский файл .Xresources. Этот файл может вносить изменения в определенные настройки графического рабочего стола, такие как цвета терминала, темы курсора и рендеринг шрифтов.
  • startxfce4 & – запуск сервера xfce4. Всякий раз, когда запускается или перезапускаете сервер VNC, эти команды будут выполняться автоматически.

Чтобы сервер VNC мог правильно использовать файл запуска (если был создан новый), делаем его исполняемым:

chmod +x ~/.vnc/xstartup

Далее, перезапускаем VNC-сервер:

vncserver -localhost
 
New 'X' desktop is slave1:1
 
Starting applications specified in /home/username/.vnc/xstartup
Log file is /home/username/.vnc/slave1:1.log

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

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

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

ssh -L 59000:localhost:5901 -C -N -l username server_ip

Где:

  • -L 59000:localhost:5901-L указывает, что данный порт (59000) на локальном компьютере должен быть переадресован на и порт на localhost целевого сервера (localhost:5901 означает порт 5901 на сервере назначения, определенный как server_ip). Обратите внимание, что указанный локальный порт несколько произволен; если порт еще не привязан к другой службе, то его можно использовать в качестве порта пересылки для туннеля.
  • -C – данный флаг включает сжатие, которое может помочь минимизировать потребление ресурсов и ускорить работу.
  • -N – Этот параметр говорит о том ssh не будет выполнять какие-либо удаленные команды. Этот параметр полезен, когда нужно просто перенаправить порты.
  • -l username server_ip-l указывает пользователя, под которым входим в систему после подключения к серверу.

Если используем PuTTY для подключения к своему серверу, можете создать SSH туннель, щелкнув правой кнопкой мыши верхнюю панель окна терминала, а затем выбрав опцию → Изменить настройки:
Находим ветку Connection в древовидном меню в левой части окна PuTTY Reconfiguration. Разворачиваем ветку SSH и нажмите Tunnels. В окне Options controlling SSH port forwarding вводим 59000 как Source Port и localhost:5901 как Destination:


Затем нажмите кнопку Add, и Apply, чтобы реализации туннеля.

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

После подключения увидим рабочий стол Xfce.

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

Для начала создадим новый файл модуля с именем /etc/systemd/system/vncserver@.service. Символ @ в конце имени позволит передать аргумент, который можете использовать в конфигурации службы. Использовать это, чтобы указать порт отображения VNC, который будем использовать при управлении службой.

Отредактируем /etc/systemd/system/vncserver@.service, указав в параметрах User, Group, WorkingDirectory и PIDFILE имя соответствующего пользователя.

[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target
 
[Service]
Type=forking
User=username
Group=username
WorkingDirectory=/home/username
 
PIDFile=/home/username/.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, а также включает опцию -localhost

Сообщим о systemd появление нового юнита:

sudo systemctl daemon-reload

Добавляем его в автозагрузку:

sudo systemctl enable vncserver@1.service

Единица после значка @ означает, под каким номером дисплея должна отображаться служба, в данном случае по умолчанию :1.

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

vncserver -kill :1
Killing Xtightvnc process ID 2229

Затем запустите его, как обычно, запускаем любую другую службу systemd, а так же убедимся, что с сервисом все ОК:

sudo systemctl start vncserver@1
 
sudo systemctl status vncserver@1

На этом все. Ego lavare manus.

  • vnc_сервера_на_ubuntu_22.04.txt
  • Последнее изменение: 2022/04/29 12:20
  • admin