Как установить и настроить VNC в Ubuntu 22.04

Введение

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

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

Предварительные условия

Для выполнения этого руководства вам понадобится:

  • Один сервер Ubuntu 22.04 с административным пользователем без прав root и настроенным брандмауэром с помощью UFW. Для настройки следуйте нашему руководству по начальной настройке сервера для Ubuntu 22.04.
  • A local computer with a VNC client installed. The VNC client you use must support connections over SSH tunnels:
    • На Windows вы можете использовать TightVNC, RealVNC или UltraVNC.
    • На macOS вы можете использовать встроенную программу Screen Sharing, или можете воспользоваться приложением для кросс-платформенного доступа, таким как RealVNC.
    • На Linux у вас есть много вариантов, включая vinagre, krdc, RealVNC, или TightVNC.

Шаг 1 — Установка рабочего окружения и сервера VNC

По умолчанию сервер Ubuntu 22.04 не поставляется с графическим рабочим окружением или установленным сервером VNC, поэтому вы начнете с установки этих компонентов.

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

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

  1. sudo apt update

Теперь установите Xfce вместе с пакетом xfce4-goodies, который содержит несколько дополнений для рабочего окружения:

  1. sudo apt install xfce4 xfce4-goodies

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

После завершения установки установите сервер TightVNC:

  1. sudo apt install tightvncserver

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

  1. vncserver

Вас попросят ввести и подтвердить пароль для удаленного доступа к вашему компьютеру:

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

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

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

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

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

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

  1. vncpasswd

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

Шаг 2 — Настройка сервера VNC

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

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

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

  1. vncserver -kill :1

Вывод будет выглядеть примерно так, хотя вы увидите другой PID:

Output
Killing Xtightvnc process ID 17648

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

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

Теперь создайте новый файл xstartup и откройте его в текстовом редакторе, таком как nano:

  1. nano ~/.vnc/xstartup

Затем добавьте следующие строки в файл:

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

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

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

Сохраните и закройте файл после добавления этих строк. Если вы использовали nano, сделайте это, нажав CTRL + X, Y, затем ENTER.

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

  1. chmod +x ~/.vnc/xstartup

Затем перезапустите сервер VNC:

  1. vncserver -localhost

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

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

Вы увидите выходные данные, аналогичные этим:

Output
New 'X' desktop is your_hostname:1 Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log

После настройки вы готовы подключиться к серверу VNC с вашего локального компьютера.

Шаг 3 — Безопасное подключение к рабочему столу VNC

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

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

  1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

Вот что означают опции этой команды ssh:

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

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

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

Если вы используете PuTTY для подключения к серверу, вы можете создать SSH-туннель, щелкнув правой кнопкой мыши на верхней панели окна терминала, а затем выбрав опцию Изменить параметры…:

Найдите ветвь Соединение в дереве меню слева в окне переконфигурации PuTTY. Разверните ветвь SSH и щелкните Туннели. На экране Опции, управляющие перенаправлением портов SSH введите 59000 в качестве Исходного порта и localhost:5901 в качестве Пункта назначения, вот так:

Затем щелкните кнопку Добавить, а затем кнопку Применить, чтобы применить туннель.

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

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

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

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

Теперь вы можете настроить ваш сервер VNC на запуск как службы systemd.

Шаг 4 — Запуск VNC в качестве службы системы

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

Сначала создайте новый файл юнита с именем /etc/systemd/system/[email protected]:

  1. sudo nano /etc/systemd/system/[email protected]

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

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

/etc/systemd/system/[email protected]
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target

[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy

PIDFile=/home/sammy/.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.

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

Затем сделайте систему осведомленной о новом файле юнита:

  1. sudo systemctl daemon-reload

Включите файл юнита:

  1. sudo systemctl enable [email protected]

Следующий код 1, идущий после знака @, указывает, на каком номере дисплея должна отображаться служба, в данном случае по умолчанию :1, как было обсуждено в Шаге 2.

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

  1. vncserver -kill :1

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

  1. sudo systemctl start vncserver@1

Вы можете проверить, что он запустился этой командой:

  1. sudo systemctl status vncserver@1

Если он запустился правильно, вывод должен выглядеть так:

Output
[email protected] - Start TightVNC server at startup Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (running) since Mon 2022-04-18 16:57:26 UTC; 20s ago Process: 97088 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2) Process: 97092 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :1 (code=exited, status=0/SUCCESS) Main PID: 97103 (Xtightvnc) Tasks: 77 (limit: 4665) Memory: 146.7M CPU: 4.459s CGroup: /system.slice/system-vncserver.slice/[email protected] . . .

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

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

  1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

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

Заключение

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-22-04