Table of Contents
Введение
*Virtual Network Computing* или VNC — это система подключения, позволяющая использовать клавиатуру и мышь для взаимодействия с графической средой рабочего стола на удаленном сервере. Данная система упрощает управление файлами, программным обеспечением и настройками на удаленном сервере для пользователей, которые еще не очень знакомы с управлением через командную строку.
В этом кратком руководстве вы установите сервер VNC с TightVNC на сервере Ubuntu 20.04 и безопасно подключитесь к нему через туннель SSH. Затем вы будете использовать клиентскую программу VNC на вашем локальном компьютере для взаимодействия с вашим сервером через графическую среду рабочего стола.
Предварительные требования
Для завершения данного обучающего модуля вам потребуется:
- Один сервер Ubuntu 20.04, non-root user с правами администратора и брандмауэр, настроенный с помощью UFW. Чтобы выполнить настройку, воспользуйтесь руководством по начальной настройке сервера Ubuntu 20.04.
- Локальный компьютер с установленным клиентом VNC. Клиент VNC, который вы используете, должен поддерживать подключение через туннели SSH:
- В macOS вы можете использовать встроенную программу Screen Sharing или кросс-платформенное приложение, например RealVNC.
Шаг 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=<^>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
Сохраните и закройте файл.
Затем сообщите системе о новом файле блока:
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 <^>59000<^>:127.0.0.1:<^>5901<^> -C -N -l <^>sammy<^> <^>your_server_ip<^>
Затем создайте новое подключение, используя клиентское программное обеспечение VNC для подключения localhost:<^>59000<^> к вашему серверу.
Заключение
Вы установили и запустили защищенный сервер VNC на своем сервере Ubuntu 20.04. Теперь вы сможете управлять файлами, программным обеспечением и настройками через удобный в использовании графический интерфейс, а также удаленно запускать графические приложения, в том числе браузеры.