Введение

*Virtual Network Computing* или VNC — это система подключения, позволяющая использовать клавиатуру и мышь для взаимодействия с графической средой рабочего стола на удаленном сервере. Данная система упрощает управление файлами, программным обеспечением и настройками на удаленном сервере для пользователей, которые еще не очень знакомы с управлением через командную строку.

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

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

vnc illustration for: Предварительные требования

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

  • Локальный компьютер с установленным клиентом VNC. Клиент VNC, который вы используете, должен поддерживать подключение через туннели SSH:
  • В macOS вы можете использовать встроенную программу Screen Sharing или кросс-платформенное приложение, например RealVNC.
  • В Linux вы можете использовать разные решения, в том числе vinagre, krdc, RealVNC или TightVNC.

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

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

				
					
sudo apt update

				
			

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

				
					
sudo apt install xfce4 xfce4-goodies

				
			

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

				
					
sudo apt install tightvncserver

				
			

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

				
					
vncpasswd

				
			

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

				
					
[secondary_label Output]

You will require a password to access your desktops.



Password:

Verify:

				
			

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

Если вы захотите сменить пароль или добавить пароль для просмотра, перезапустите команду vncpasswd.

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

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

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

				
					
nano ~/.vnc/xstartup

				
			

Добавьте в новый файл следующие строки:

				
					
[label ~/.vnc/xstartup]

#!/bin/bash

xrdb $HOME/.Xresources

startxfce4 &

				
			

Первая после *шебанга*) команда в файле xrdb $HOME/.​​Xresources указывает системе графического интерфейса VNC прочитать файл пользователя сервера .Xresources​​​. Вторая команда указывает серверу запустить Xfce.

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

Затем сделайте файл исполняемым:

				
					
chmod +x ~/.vnc/xstartup

				
			

И запустите сервер VNC с помощью команды vncserver:

				
					
vncserver -localhost

				
			

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

Вывод будет выглядеть следующим образом:

				
					
[secondary_label 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

				
			

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

Шаг 3 — Безопасная настройка рабочего стола VNC

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

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

				
					
[environment local]

ssh -L <^>59000<^>:localhost:<^>5901<^> -C -N -l <^>sammy<^> <^>your_server_ip<^>

				
			

Локальным портом может быть любой порт, который еще не блокирован другой программой или процессом, хотя в этом примере мы используем <^>59000<^>. Также замените <^>sammy<^> на имя пользователя Ubuntu, а <^>your_server_ip<^> должен отражать IP-адрес вашего сервера.

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

Найдите ветку Connection​​​ в меню слева окна реконфигурации PuTTY. Раскройте ветку SSH и нажмите на Tunnels. На экране Options controlling SSH port forwarding введите 59000​​​ в поле Source Port​​​ и localhost:5901 в поле Destination:

Затем нажмите кнопку Add, потом кнопку Apply для активации туннеля.

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

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

Для доступа к файлам в каталоге home вы можете использовать менеджер файлов или командную строку, как показано здесь:

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

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

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

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

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

				
			

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

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

				
					
[label  /etc/systemd/system/vncserver@.service]

[Unit]

Description=Start TightVNC server at startup

After=syslog.target network.target



[Service]

Type=forking

User=&lt;^&gt;sammy&lt;^&gt;

Group=&lt;^&gt;sammy&lt;^&gt;

WorkingDirectory=/home/&lt;^&gt;sammy&lt;^&gt;



PIDFile=/home/&lt;^&gt;sammy&lt;^&gt;/.vnc/%H:%i.pid

ExecStartPre=-/usr/bin/vncserver -kill :%i &gt; /dev/null 2&gt;&amp;1

ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i

ExecStop=/usr/bin/vncserver -kill :%i



[Install]

WantedBy=multi-user.target

				
			

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

Затем сообщите системе о новом файле блока:

				
					
sudo systemctl daemon-reload

				
			

Активируйте файл блока:

				
					
sudo systemctl enable vncserver@1.service

				
			

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

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

				
					
vncserver -kill :1

				
			

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

				
					
sudo systemctl start vncserver@1

				
			

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

				
					
sudo systemctl status vncserver@1

				
			

Дополнительную информацию о systemctl можно найти в нашем обучающем руководстве Использование systemctl в управлении служб и блоков systemd.

Для повторного подключения еще раз запустите туннель SSH:

				
					
[environment local]

ssh -L &lt;^&gt;59000&lt;^&gt;:127.0.0.1:&lt;^&gt;5901&lt;^&gt; -C -N -l &lt;^&gt;sammy&lt;^&gt; &lt;^&gt;your_server_ip&lt;^&gt;

				
			

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

Заключение

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