Введение
Виртуальная сетевая вычислительная машина, или 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, обновите список пакетов:
Теперь установите Xfce вместе с пакетом xfce4-goodies
, который содержит несколько дополнений для рабочего окружения:
Во время установки вас могут попросить выбрать менеджер отображения по умолчанию для Xfce. Менеджер отображения – это программа, которая позволяет выбрать и войти в рабочее окружение через графический интерфейс. Вы будете использовать только Xfce, когда подключитесь с помощью клиента VNC, и в этих сеансах Xfce вы уже будете вошли как ваш пользователь Ubuntu без прав root. Поэтому для целей этого руководства выбор менеджера отображения не имеет значения. Выберите любой и нажмите ENTER
.
После завершения установки установите сервер TightVNC:
Затем выполните команду vncserver
, чтобы установить пароль для доступа к VNC, создать начальные файлы конфигурации и запустить экземпляр сервера VNC:
Вас попросят ввести и подтвердить пароль для удаленного доступа к вашему компьютеру:
OutputYou will require a password to access your desktops.
Password:
Verify:
Пароль должен состоять из шести или восьми символов. Пароли, содержащие более 8 символов, будут автоматически обрезаны.
После подтверждения пароля у вас будет возможность создать пароль только для просмотра. Пользователи, вошедшие с этим паролем, не смогут управлять экземпляром VNC с помощью мыши или клавиатуры. Это полезная опция, если вы хотите что-то продемонстрировать другим людям с помощью вашего сервера VNC, но это необязательно.
Процесс затем создает необходимые файлы конфигурации по умолчанию и информацию о подключении для сервера. Кроме того, он запускает экземпляр сервера по умолчанию на порту 5901
. Этот порт называется портом отображения и в VNC он обозначается как :1
. VNC может запускать несколько экземпляров на других портах отображения, с :2
, относящимся к порту 5902
, :3
относящимся к 5903
и так далее:
OutputWould 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
:
На этом этапе сервер VNC установлен и запущен. Теперь вы его настроите для запуска Xfce и предоставления нам доступа к серверу через графический интерфейс.
Шаг 2 — Настройка сервера VNC
Серверу VNC необходимо знать, какие команды выполнять при запуске. Конкретно, VNC должен знать, к какой графической среде рабочего стола он должен подключиться.
Команды, которые сервер VNC выполняет при запуске, находятся в файле конфигурации под названием xstartup
в папке .vnc
в вашем домашнем каталоге. Сценарий запуска был создан при выполнении команды vncserver
на предыдущем шаге, но вы создадите свой собственный, чтобы запустить рабочий стол Xfce.
Поскольку вы собираетесь изменить конфигурацию сервера VNC, сначала остановите экземпляр сервера VNC, который работает на порту 5901
следующей командой:
Вывод будет выглядеть примерно так, хотя вы увидите другой PID:
OutputKilling Xtightvnc process ID 17648
Перед тем как изменить файл xstartup
, сделайте резервную копию оригинала:
Теперь создайте новый файл xstartup
и откройте его в текстовом редакторе, таком как nano
:
Затем добавьте следующие строки в файл:
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
Первая строка – это shebang. В исполняемых текстовых файлах на платформах *nix shebang сообщает системе, какой интерпретатор использовать для выполнения этого файла. В данном случае файл передается интерпретатору Bash. Это позволит последующим строкам выполняться как команды, в порядке их следования.
Первая команда в файле, xrdb $HOME/.Xresources
, указывает графической оболочке VNC прочитать файл .Xresources
пользователя сервера. Файл .Xresources
– это место, где пользователь может вносить изменения в определенные настройки графического рабочего стола, такие как цвета терминала, темы курсора и рендеринг шрифтов. Вторая команда указывает серверу запустить Xfce. При каждом запуске или перезапуске сервера VNC эти команды будут выполняться автоматически.
Сохраните и закройте файл после добавления этих строк. Если вы использовали nano
, сделайте это, нажав CTRL + X
, Y
, затем ENTER
.
Чтобы убедиться, что сервер VNC сможет правильно использовать этот новый файл запуска, вам нужно сделать его исполняемым:
Затем перезапустите сервер VNC:
Обратите внимание, что на этот раз в команду включен параметр -localhost
, который привязывает сервер VNC к интерфейсу обратной связи вашего сервера. Это заставит VNC разрешать только те подключения, которые исходят с сервера, на котором он установлен.
На следующем этапе вы установите SSH-туннель между вашим локальным компьютером и вашим сервером, фактически обманывая VNC, заставляя его думать, что подключение с вашего локального компьютера началось на вашем сервере. Эта стратегия добавит дополнительный уровень безопасности вокруг VNC, так как только пользователи, у которых уже есть SSH-доступ к вашему серверу, смогут получить к нему доступ.
Вы увидите выходные данные, аналогичные этим:
OutputNew '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
:
Вот что означают опции этой команды 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]
:
Символ @
в конце имени позволит нам передавать аргумент, который вы можете использовать в конфигурации службы. Вы будете использовать это для указания порта отображения VNC, который вы хотите использовать при управлении службой.
Добавьте следующие строки в файл. Обязательно измените значение User, Group, WorkingDirectory и имя пользователя в значении PIDFILE, чтобы соответствовать вашему имени пользователя:
[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
, идущий после знака @
, указывает, на каком номере дисплея должна отображаться служба, в данном случае по умолчанию :1
, как было обсуждено в Шаге 2.
Остановите текущий экземпляр сервера VNC, если он все еще работает:
Затем запустите его так, как вы запустите любую другую службу systemd:
Вы можете проверить, что он запустился этой командой:
Если он запустился правильно, вывод должен выглядеть так:
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 туннель:
Затем создайте новое подключение с помощью вашего клиентского программного обеспечения VNC к localhost:59000
, чтобы подключиться к вашему серверу.
Заключение
Теперь у вас есть защищенный сервер VNC, работающий на вашем сервере Ubuntu 22.04. Теперь вы сможете управлять вашими файлами, программным обеспечением и настройками с помощью удобного графического интерфейса, а также запускать графическое программное обеспечение, такое как веб-браузеры, удаленно.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-22-04