Введение

Решим задачу удаленного управления рабочей станцией с Ubuntu 18.04 на борту. Одного SSH недостаточно, т.к. это рабочая станция и необходима удаленная техническая поддержка.

Был выбран VNC, т.к. необходима лицензия в корпоративной среде. Open Source наше всё 🙂

Необходимо

  1. Рабочая станция с Ubuntu 18.04 и графической средой, с неroot пользователем и фаерволом.
  2. Рабочая станция с установленным VNC клиентом, поддерживающим подключения по SSH.
    1. На Windows: TightVNC, RealVNC, UltraVNC.
    2. На macOS RealVNC.
    3. На Linux: vinagre, krdc, RealVNC, or TightVNC.

Шаг 1. Установка VNC Server

Устанавливаем на рабочую станцию, которой нужно управлять.

Обновим список пакетов и обновим их:

sudo apt update -y && sudo apt upgrade -y

UPDATE:

TinyVNC - завелся, но криво, графическая оболочка работает наполовину

TigerVNC - завелся, полет нормальный, но нет возможности подключиться к текущему сеансу и подходит только последняя версия Tight VNC Viewer

X11VNC - завелся, но не получилось создать службу в systemd для автозапуска

Установим TigerVNC Server:

sudo apt install xserver-xorg-core
sudo apt install tigervnc-standalone-server tigervnc-xorg-extension tigervnc-viewer

Установим Gnome - опционально, если нет графической оболочки

sudo apt install ubuntu-gnome-desktop

Запустим службу GNOME и убедимся, что он есть а автозагрузке

sudo systemctl start gdm
sudo systemctl enable gdm

Установим пароль VNC Server

Для первоначальной настройки введем команду vncserver, чтобы установить пароль и создать файлы конфигурации.

vncserver

ВАЖНО! Пароль должен быть от 6 до 8 символов !

После ввода пароля управления будет запрошен пароль только для просмотра. Удобно для демонстраций экрана.

Шаг 2. Настройка VNC Server

VNC запускает свой экземпляр на 5901 порту. Это display port, vnc называет его :1 (в клиенте можно вводить вместо 5901). VNC можно запускать в несколько экземпляров на других display port, :2 или :3 и т. д.

Так как мы собираемся поменять конфигурацию VNC, остановим работающий экземпляр (после любого изменения конфигурации):

vncserver -kill :1

Нас интересует файл xstartup в папке .vnc, которая находится в вашей домашней директории.

Прежде чем менять xstartup, забекапим оригинал:

 mv ~/.vnc/xstartup ~/.vnc/xstartup.bak 

Создадим новый xstartup

nano ~/.vnc/xstartup

Добавим строки для использования оболочки GNOME:

#!/bin/sh 
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
vncconfig -iconic &
dbus-launch --exit-with-session gnome-session &

Или добавим строчки для использования оболочки XFCE:
(с GNOME на данный момент баг при логине, не проходит через аутентификацию, с XFCE всё ок)
Чтобы установить XFCE - sudo apt install xfce4 и ребут

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

Чтоб VNC сервер мог использовать файл, сделаем его исполняемым:

sudo chmod +x ~/.vnc/xstartup

Запустим VNC Server

vncserver

Вы должны увидеть такое сообщение:

Output
New 'X' desktop is your_hostname:1
Starting applications specified in /home/имя пользователя/.vnc/xstartup
Log file is /home/имя пользователя /.vnc/your_hostname:1.log 

Шаг 3. Соединяемся безопасно

VNC сам не использует шифрованное подключение, поэтому сначала мы подключимся через SSH-туннель и установим VNC сессию к localhost.

Подключитесь по SSH к управляемой рабочей станции через putty или из консоли.

TightVNC Java Client с встроенным SSH туннелем

Windows клиент TightVNC можно скачать можно тут - https://www.tightvnc.com/download.php

Шаг 4. Запуск VNC Server как службы

Для упрощения управления и запуска VNC Server после перезагрузки, создадим файл службы:

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

Добавим в него содержимое:

[Unit] Description=Start TightVNC server at startup with 1024x768 resolution and 24 bits
After=syslog.target network.target
[Service] Type=forking
User=ИМЯ ВАШЕГО ПОЛЬЗОВАТЕЛЯ
Group= ИМЯ ВАШЕГО ПОЛЬЗОВАТЕЛЯ 
WorkingDirectory=/home/ИМЯ ВАШЕГО ПОЛЬЗОВАТЕЛЯ 
PIDFile=/home/ИМЯ ВАШЕГО ПОЛЬЗОВАТЕЛЯ /.vnc/%H:2.pid
ExecStartPre=-/usr/bin/vncserver -kill :2 > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -geometry 1024x768 :2
ExecStop=/usr/bin/vncserver -kill :2
[Install] WantedBy=multi-user.target


Перезапуск служб:

sudo systemctl daemon-reload

Добавление службы в автозагрузку:

sudo systemctl enable vncserver@1.service

Перезапуск для теста:

sudo reboot

Заключение

После перезагрузки всё заработало, надеюсь, у вас тоже.

Полезные команды:

vncserver -list - активные сессии VNC
vncserver -kill :* - закрыть все сессии VNC Server или по идентификатору (:1,:2 и т.д.)
vncpasswd - сменить пароль VNC

 

Поделиться