Поиск по сайту:

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


Введение

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

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

Предпосылки

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

  • Один сервер Ubuntu 20.04 с администратором без полномочий root и брандмауэром, настроенным с помощью UFW. Чтобы настроить это, следуйте нашему руководству по первоначальной настройке сервера для Ubuntu 20.04.
  • Локальный компьютер с установленным клиентом VNC. Используемый вами клиент VNC должен поддерживать соединения через туннели SSH:
    • В Windows можно использовать UltraVNC.
    • В macOS можно использовать встроенный RealVNC.
    • В Linux вы можете выбрать один из многих вариантов, включая vinagre, krdc, TightVNC.

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

    По умолчанию сервер Ubuntu 20.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

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

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

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

    Первая команда в файле, xrdb $HOME/.Xresources, указывает платформе GUI 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-соединение на локальном компьютере, которое безопасно перенаправляется на соединение localhost для VNC. Вы можете сделать это через терминал в 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 20.04, вы добавили правило UFW, разрешающее подключения к вашему серверу через OpenSSH.

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

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

    Найдите ветку Connection в древовидном меню в левой части окна PuTTY Reconfiguration. Разверните ветку 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/vncserver@.service:

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

    Символ @ в конце имени позволит нам передать аргумент, который вы можете использовать в конфигурации службы. Вы будете использовать это, чтобы указать порт отображения 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-битный цвет с разрешением 1280x800. Вы также можете изменить эти параметры запуска в соответствии с вашими потребностями. Также обратите внимание, что команда ExecStart снова включает параметр -localhost.

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

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

    1. sudo systemctl daemon-reload

    Включите файл модуля:

    1. sudo systemctl enable vncserver@1.service

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

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

    1. vncserver -kill :1

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

    1. sudo systemctl start vncserver@1

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

    1. sudo systemctl status vncserver@1

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

    Output
    ● vncserver@1.service - Start TightVNC server at startup Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-05-07 17:23:50 UTC; 6s ago Process: 39768 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2) Process: 39772 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS) Main PID: 39795 (Xtightvnc) ...

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

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

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

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

    Заключение

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