Virtual Network Computing (VNC) - это графическая система общего доступа к рабочему столу, которая позволяет использовать клавиатуру и мышь для удаленного управления другим компьютером.
В этой статье описываются шаги по установке и настройке VNC-сервера в CentOS 8. Мы также покажем, как безопасно подключаться к VNC-серверу через туннель SSH.
Подготовка
Чтобы следовать этому руководству, вам необходимо войти в систему как пользователь с привилегиями sudo на удаленном компьютере CentOS.
Установка окружения рабочего стола
Как правило, на серверах не установлена среда рабочего стола. Если машина, к которой вы хотите подключиться, не имеет графического интерфейса, сначала установите ее. В противном случае пропустите этот шаг.
Выполните следующую команду, чтобы установить Gnome, среду рабочего стола по умолчанию в CentOS 8 на удаленной машине:
sudo dnf groupinstall "Server with GUI"
В зависимости от вашей системы загрузка и установка пакетов и зависимостей Gnome может занять некоторое время.
Установка VNC-сервера
В качестве сервера мы будем использовать TigerVNC - активно поддерживаемый высокопроизводительный VNC-сервер с открытым исходным кодом. Он доступен в репозиториях CentOS по умолчанию, для его установки введите:
sudo dnf install tigervnc-server
После установки VNC-сервера выполните команду vncserver
, чтобы создать начальную конфигурацию и установить пароль. Не используйте sudo
при выполнении следующей команды:
vncserver
Вам будет предложено ввести и подтвердить пароль и указать, следует ли устанавливать его в качестве пароля только для просмотра (view-only). Если вы решите установить пароль только для просмотра, пользователь не сможет взаимодействовать с экземпляром VNC с помощью мыши и клавиатуры.
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/linuxize/.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/linuxize/.vnc/server2.linuxize.com:1.log
При первом запуске команды vncserver
она создаст и сохранит файл паролей в каталоге ~/.vnc
, который будет создан, если его не будет.
Обратите внимание, что : 1
после имени хоста в выводе выше. Это указывает номер порта дисплея, на котором работает сервер VNC. В нашем случае сервер работает по TCP-порту 5901 (5900 + 1)
. Если вы создадите второй экземпляр, он будет работать на следующем свободном порту, то есть : 2
, что означает, что сервер работает на порту 5902 (5900 + 2)
.
Важно помнить, что при работе с серверами VNC: X
- это порт дисплея, который относится к 5900 + X
.
Прежде чем перейти к следующему шагу, сначала остановите экземпляр VNC, используя команду vncserver
с параметром -kill
и номером сервера в качестве аргумента. В нашем случае сервер работает в порту 5901 (: 1)
, поэтому, чтобы остановить его, запустите:
vncserver -kill :1
Мы получим такой вывод:
Killing Xvnc process ID 19681
Настройка VNC-сервера
Теперь, когда и Gnome, и TigerVNC установлены на удаленной машине CentOS, следующим шагом является настройка TigerVNC для использования Gnome. Сервер VNC использует файл ~/.vnc/xstartup
для запуска приложений при создании нового рабочего стола. Откройте файл:
vim ~/.vnc/xstartup
И отредактируйте его следующим образом:
#!/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 &
Сохраните и закройте файл (напоминаем, что в vim для этого нужно ввести :wq
). Приведенный выше скрипт автоматически выполняется при каждом запуске или перезапуске сервера TigerVNC.
Если вы хотите передать дополнительные параметры серверу VNC, откройте файл ~/.vnc/config
и добавьте один параметр в каждой строке. Наиболее распространенные параметры перечислены в файле. Раскомментируйте и измените по своему вкусу. Вот пример:
# securitytypes=vncauth,tlsvnc # desktop=sandbox geometry=1920x1080 # localhost # alwaysshared
Создание файла модуля Systemd
Файлы модулей позволяют легко запускать, останавливать и перезапускать службы. Как правило, лучшим местом для хранения файлов пользовательских модулей является ~/.config/systemd/user
. Создайте каталог при помощи команды mkdir
:
mkdir -p ~/.config/systemd/user
Скопируйте дефолтный файл модуля vncserver:
cp /usr/lib/systemd/user/vncserver@.service ~/.config/systemd/user/
Сообщите systemd, что существует новый файл пользовательского модуля:
systemctl --user daemon-reload
Запустите службу VNC и включите ее при загрузке:
systemctl --user enable vncserver@:1.service --now
Число 1
после @:
определяет порт дисплея, который будет прослушивать служба VNC. Мы используем 1
, что означает, что VNC-сервер будет прослушивать порт 5901
, как мы обсуждали ранее.
Включите задержку, чтобы служба пользователя запускалась при загрузке и продолжала работать, когда пользователь не в системе:
loginctl enable-linger
Убедитесь, что служба успешно запущена:
systemctl --user status vncserver@:1.service
Получим такой вывод:
? vncserver@:1.service - Remote desktop service (VNC) Loaded: loaded (/home/linuxize/.config/systemd/user/vncserver@.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-01-30 22:14:08 UTC; 2s ago Process: 20813 ExecStart=/usr/bin/vncserver :1 (code=exited, status=0/SUCCESS) Process: 20807 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill :1 > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) CGroup: /user.slice/user-1000.slice/user@1000.service/vncserver.slice/vncserver@:1.service ...
Подключение к серверу VNC
VNC не является зашифрованным протоколом и может подвергаться перехвату пакетов. Рекомендуемый подход заключается в создании туннеля SSH для безопасной пересылки трафика с локального компьютера через порт 5901
на удаленный сервер с тем же портом.
Настройка SSH-туннелирования в Linux и macOS
Если вы используете Linux, macOS или любую другую операционную систему на основе Unix на своем компьютере, вы можете легко создать туннель с помощью следующей команды ssh
:
ssh -L 5901:127.0.0.1:5901 -N -f -l username remote_server_ip
Вам будет предложено ввести пароль пользователя. Замените username
и remote_server_ip
своим именем пользователя и IP-адресом вашего сервера.
Настройка SSH-туннелирования в Windows
Пользователи Windows могут настроить SSH-туннелирование с помощью PuTTY.
Откройте Putty и введите IP-адрес вашего сервера в поле Host name or IP address.
В меню «Connection» разверните пункт «SSH» и выберите «Tunnels» . Введите порт VNC-сервера 5901
в поле Source Port, введите адрес_сервера: 5901
в поле Destination и нажмите кнопку Add.
Вернитесь на страницу ”Session”, чтобы сохранить настройки, чтобы вам не приходилось каждый раз вводить их. Чтобы войти на удаленный сервер, выберите сохраненный сеанс и нажмите кнопку «Open» .
Подключение с помощью Vncviewer
Чтобы подключиться к удаленному Серверу, откройте программу просмотра VNC и введите localhost: 5901
.
Вы можете использовать любую программу просмотра VNC, такую как TigerVNC, TightVNC, RealVNC, UltraVNC Vinagre и VNC Viewer для Google Chrome.
Мы будем использовать TigerVNC:
При появлении запроса введите пароль, и вы увидите рабочий стол Gnome по умолчанию. Это должно выглядеть примерно так:
Готово! Теперь вы можете начать работу на удаленном рабочем столе с локального компьютера, используя клавиатуру и мышь.
Итоги
Мы показали вам, как настроить VNC-сервер и подключиться к удаленной машине CentOS 8.
Чтобы запустить отображение для более чем одного пользователя, повторите те же шаги. Создайте исходную конфигурацию, установите пароль с помощью команды vncserver
и создайте новый файл службы, используя другой порт.