Установка и использование VNC через SSH в Ubuntu 18.04

Установим окружение рабочего стола и VNC сервер

sudo apt update
sudo apt install xfce4 xfce4-goodies
sudo apt install tightvncserver

Для завершения инициализируем конфигурацию VNC сервера после установки.

vncserver

Output
You will require a password to access your desktops.
Password:
Verify:

Пароль должен быть не более 8 символов, пароль большей длины будет обрезан автоматически до первых 8 символов.

OutputWould you like to enter a view-only password (y/n)? n
xauth:  file /home/xakinfo/.Xauthority does not exist

New 'X' desktop is your_hostname:1

Creating default startup script /home/xakinfo/.vnc/xstartup
Starting applications specified in /home/xakinfo/.vnc/xstartup
Log file is /home/xakinfo/.vnc/your_hostname:1.log

Конфигурация VNC сервера

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

Поскольку мы собираемся изменить настройки сервера VNC, сначала остановите экземпляр сервера VNC, который запущен на порту, 5901с помощью следующей команды:

vncserver -kill :1

Output
Killing Xtightvnc process ID 17648

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

Команды в этом файле выполняются автоматически при каждом запуске или перезапуске сервера VNC. Нам нужен VNC, чтобы запустить нашу среду рабочего стола, если она еще не запущена. Добавьте эти команды в файл:

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

Первая команда в файле, xrdb $HOME/.Xresourcesсообщает инфраструктуре GUI VNC, чтобы прочитать .Xresourcesфайл пользователя сервера . .Xresourcesгде пользователь может вносить изменения в определенные настройки графического рабочего стола, такие как цвета терминалов, темы курсора и рендеринг шрифтов. Вторая команда сообщает серверу о запуске Xfce, в котором вы найдете все графическое программное обеспечение, необходимое для комфортного управления вашим сервером.

Чтобы гарантировать, что сервер VNC сможет использовать этот новый файл запуска правильно, нам нужно сделать его исполняемым.

sudo chmod +x ~/.vnc/xstartup

Теперь перезапустите сервер VNC.

vncserver

Вы увидите аналогичный результат:

Output
New 'X' desktop is your_hostname:1

Starting applications specified in /home/xakinfo/.vnc/xstartup
Log file is /home/xakinfo/.vnc/your_hostname:1.log

Безопасное подключение настольного компьютера VNC

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

Создайте соединение SSH на локальном компьютере, которое надежно перейдет к localhostсоединению для VNC. Вы можете сделать это через терминал на Linux или macOS с помощью следующей команды:

ssh -L 5901:127.0.0.1:5901 -C -N -l xakinfo your_server_ip

-LПереключатель определяет привязки порта. В этом случае мы привязываем порт 5901удаленного подключения к порту 5901на вашей локальной машине. -CПереключатель позволяет сжимать, в то время как -Nпереключатель говорит , sshчто мы не хотим , чтобы выполнить удаленную команду. -lПереключатель указывает имя удаленного входа в систему .

Не забудьте заменить xakinfo your_server_ipс SUDO внекорневой имя пользователя и IP — адрес вашего сервера.

Если вы используете графический SSH-клиент, например PuTTY, используйте your_server_ipв качестве IP-соединения и установите localhost:5901в качестве нового перенаправленного порта в настройках туннеля SSH программы.

Как только туннель запущен, используйте клиент VNC для подключения localhost:5901. Вам будет предложено пройти аутентификацию, используя пароль, указанный на шаге 1.

Как только вы подключитесь, вы увидите рабочий стол по умолчанию Xfce. Он должен выглядеть примерно так:

Установка и использование VNC через SSH в Ubuntu 18.04

Запуск VNC в качестве системного сервиса

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

Сначала создайте новый единичный файл, который называется /etc/systemd/system/vncserver@.service

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

@Символ в конце имени позволит нам указать порт отображения VNC, который мы хотим использовать, когда мы управляем сервисом.

Добавьте в файл следующие строки. Обязательно измените значение User , Group , WorkingDirectory и имя пользователя в значении PIDFILE в соответствии с вашим именем пользователя:

/etc/systemd/system/vncserver@.service [Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target

[Service]
Type=forking
User=xakinfo
Group=xakinfo
WorkingDirectory=/home/xakinfo

PIDFile=/home/xakinfo/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

Команда ExecStartPreостанавливает VNC, если она уже запущена. Команда ExecStartзапускает VNC и устанавливает глубину цвета в 24-битный цвет с разрешением 1280×800. Вы также можете изменить эти параметры запуска, чтобы удовлетворить ваши потребности.

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

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

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

Output● vncserver@1.service - Start TightVNC server at startup
   Loaded: loaded (/etc/systemd/system/vncserver@.service; indirect; vendor preset: enabled)
   Active: active (running) since Mon 2018-07-09 18:13:53 UTC; 2min 14s ago
  Process: 22322 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS)
  Process: 22316 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=0/SUCCESS)
 Main PID: 22330 (Xtightvnc)

...

Теперь ваш VNC-сервер будет доступен при перезагрузке компьютера.

Запустите свой туннель SSH снова:

ssh -L 5901:127.0.0.1:5901 -C -N -l xakinfo your_server_ip

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

Заключение

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