Сегодня рассмотрим, как правильно устанавливать VNC-сервер на Ubuntu 18.04, а также настраивать его. Также расскажем, как правильно подключаться к этому серверу, используя SSH-туннель.
Что такое VNC?
VNC – это аббревиатура, которая расшифровывается, как Virtual Network Computing. Это система, позволяющая управлять другим компьютером на расстоянии. Есть еще один протокол, который предоставляет такую возможность – RDP. Он разработан компанией Microsoft.
Так вот, VNC – это альтернатива данному протоколу. Чтобы установить VNC на VPS, необходимо убедиться в том, что вы root-пользователь.
Как установить рабочий стол VNC на Linux Ubuntu?
Подавляющее количество серверов без среды пользовательского интерфейса. Поэтому сперва необходимо ее поставить на устройство. Мы попробуем выполнить инсталляцию облегченной версии.
Есть разные среды рабочего стола. Нами будет использоваться Xfce. Ее преимущества:
- Скорость.
- Стабильность.
- Легкость в использовании.
По этим причинам она лучше всего подходит для использования на сервере новичками.
Сперва необходимо выполнить следующие инструкции в терминале, чтобы обновить систему.
sudo apt update sudo apt upgrade
После этого ввести такую инструкцию, чтобы установить среду.
sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
Период времени, требуемый для установки, зависит от компьютера.
Как создать пользователя VNC?
Чтобы сделать работу с сервером надежной, стабильной и быстрой, необходимо создать отдельного пользователя.
Внимание! Нельзя запускать сервер через пользователя с правами root. Дело в том, что некоторые приложения, такие как Google Chrome, отказываются работать с ними. Поэтому после того, как будет запущен сервер, необходимо сразу создать отдельного пользователя.
В нашем случае мы сначала создадим пользователя без рут-прав. В качестве него будет выступать vnc_user. Для этого воспользуйтесь следующей командой:
adduser vnc_user
Имя пользователя может быть любым другим. Каждый сам решает, какое ему больше нужно. Вас попросят ввести пароль и ввести некоторые данные о пользователе.
Укажите новый пароль для юзера. Другие детали можно не приводить. Чтобы пропустить каждый из последующих этапов, достаточно нажать кнопку Enter.
После этого необходимо воспользоваться следующей командой, чтобы инсталлировать sudo.
apt-get install sudo
Теперь необходимо добавить пользователя vnc_user в sudo. Проще говоря, пользователь vnc_user будет действовать от имени root, а также иметь возможность выполнять те команды, которые позволено выполнять администратору.
$ gpasswd -a vnc_user sudo Adding user vnc_user to group sudo
Чтобы переключиться на созданного пользователя, необходимо выполнить следующую инструкцию.
su - vnc_user
Инсталляция VNC
Есть несколько VNC-серверов, доступных для Ubuntu: TightVNC, TigerVNC, x11vnc. Все они имеют собственные преимущества и недостатки по части производительности и надежности.
В нашем примере будет использоваться TigerVNC, который, по нашему мнению, является лучшим среди всех указанных ранее.
Чтобы инсталлировать этот сервер, необходимо дать следующую инструкцию в терминале:
sudo apt install tigervnc-standalone-server tigervnc-common
После того, как процесс закончится, необходимо выполнить инструкцию vncserver. С ее помощью выполняется первоначальная конфигурация с последующей установкой нового пароля.
Внимание! При выполнении этой инструкции запрещено использовать sudo.
vncserver -localhost no
Зачем -localhost no?
В большинстве материалов, посвященных VNC, такой инструкции нет. Тем не менее, без использования этого флага существенно увеличивается вероятность ошибок, таких как:
- vnc connection closed;
- vnc connection refused.
Это делается для безопасности. Если подключение к серверу возможно только по локальной сети, то никто к нему не сможет получить доступ. Но и удаленно управлять через интернет им не получится.
Если использовать указанный ранее флаг, эта проблема решается. Но сразу же появляется новая: хакеры сразу будут пытаться проникнуть на сервер, подобрав к нему пароль. Поэтому нужно ответственно отнестись к созданию кода доступа. В пароле обязательно должны быть следующие элементы:
- Символы.
- Буквы разных регистров.
- Цифры.
Этот пароль нигде не храните в открытом месте. Желательно его запомнить, но здесь также нужно быть осторожным. Практика показывает, что забыть пароль можно даже через несколько месяцев его использования. С учетом этого факта, хранить пароли в определенном месте надо, но лишь в том, к которому получить доступ не получится.
Можно воспользоваться специальным сервисом для генерации пароля.
Также есть возможность задать пароль исключительно для просмотра. Если это сделать, никаких изменений в сервер вносить не получится. Работать с мышью и клавиатурой также не будет возможным.
You will require a password to access your desktops. Password: Verify: Would you like to enter a view-only password (y/n)? n /usr/bin/xauth: file /home/vnc_user/.Xauthority does not exist New 'server2.linuxize.com:1 (linuxize)' desktop at :1 on machine server2.linuxize.com Starting applications specified in /etc/X11/Xvnc-session Log file is /home/vnc_user/.vnc/server2.linuxize.com:1.log Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/vnc_user/.vnc/passwd :1 to connect to the VNC server.
Если выполнить инструкцию vncserver в первый раз, она создаст файл с паролем в папке ~/.vnc. Если на момент выполнения инструкции такого каталога нет, он будет создан.
Обратите внимание на :1 после названия хоста в выводе ранее. Благодаря этому знаку, мы будем знать номер порта, где работает наш сервер. В случае с нами, это TCP-порт 5901 (5900 + 1). Если использовать команду vncserver для генерации второго экземпляра, то он будет работать на следующем порту, который будет свободен. Проще говоря, :2. Это значит, что сервер будет функционировать на порту 5902.
То есть, 😡 указывает на ту цифру, которая будет прибавляться к 5900.
Перед тем, как продолжить изучение этой статьи, остановите все сессии, запущенные на VNC-сервере, используя параметр -kill, а также номер сервера в качестве аргумента. В описываемом нами примере сервер работает на порту 5901, поэтому и останавливать его нужно, используя :1 так, как в этом примере.
vncserver -kill :1 Killing Xtigervnc process ID 7264... success!
Установка параметров работы VNC-сервера
Сейчас у нас работают Xfce, TigerVNC, и нам требуется задать параметры для последнего. После этого создать такой файл:
nano ~/.vnc/xstartup #!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec startxfce4
Далее нам необходимо сохранить все изменения, внесенные в файл и закрыть его. Инструкции, приведенные нами ранее, будут запускаться каждый раз после того, как сервер будет включаться или перезагружаться.
Убедитесь в том, что файл ~/.vnc/xstartup имеет разрешение на то, чтобы запускаться. Для этого используйте следующую инструкцию.
chmod u+x ~/.vnc/xstartup
Если требуется передать еще какие-то параметры на сервер, то можно создать файл конфигурации и добавить по одному параметру в строку так, как приводится в этом примере.
geometry=1920x1084 dpi=96
Как создать Systemd unit файл
Теперь давайте сгенерируем файл Systemd unit, дающий нам возможность без особых затруднений включать, останавливать или перезагружать сервер по мере необходимости, аналогично другим сервисам systemd.
Для начала запустите текстовый редактор, скопируйте приведенную ниже конфигурацию и вставьте туда. Обязательно введите имя пользователя, которое вы задали ранее.
sudo nano /etc/systemd/system/vncserver@.service [Unit] Description=Remote desktop service (VNC) After=syslog.target network.target [Service] Type=simple User=vnc_user PAMName=login PIDFile=/home/%u/.vnc/%H%i.pid ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || :' ExecStart=/usr/bin/vncserver :%i -localhost no -geometry 1440x900 -alwaysshared -fg ExecStop=/usr/bin/vncserver -kill :%i [Install] WantedBy=multi-user.target
Далее сохраните изменения в этом файле и закройте его. После этого уведомите systemd, что вами был создан новый файл.
sudo systemctl daemon-reload
Далее делаем файл доступным, используя такую команду.
sudo systemctl enable vncserver@1.service
Запустите сервис.
sudo systemctl start vncserver@1.service
Убедитесь, что он работает без проблем.
sudo systemctl status vncserver@1.service
Как осуществить подключение к VNC-серверу
Поскольку VNC – не зашифрованный протокол, его пакеты перехватить не составит труда. Чтобы безопасно перенаправлять трафик, необходимо создать SSH-туннель.
Если вы используете систему Linux, туннель создается с помощью следующей команды.
ssh -L 5901:IP-Вашего-Сервера:5901 -N -f -l username server_ip_address
Вам будет предложено указать пароль пользователя.
Обязательно замените username и IP-Вашего-Сервера на те значения, которые актуальны для вашего случая.
Если вы используете Windows, установка туннеля возможна с помощью программы PuTTY SSH. Но поскольку мы сегодня рассматриваем Linux, то особенности использования данной программы следует рассмотреть отдельно.
Выводы
Теперь у нас есть полностью работающий сервер VNC на Linux и можно пользоваться простым интерфейсом, чтобы управлять сервером с локального компьютера.
Для настройки VNC-сервера на запуск отображения для нескольких пользователей, необходимо создать начальную конфигурацию и использовать команду vncserver, чтобы задать пароль. Помимо этого, нужно создать новый файл сервиса, воспользовавшись другим портом.