Удаленное управление Linux (доступ к графической сессии текущего пользователя)

HELP-ME-24.COM (Freelance Team), Черноусов Антон

Так как единственным вменяемым способом удаленного доступа к графической консоли Linux-рабочих станций на данный момент является TeamViewer, который нельзя использовать для удаленной коммерческой поддержки (и он постоянно отключается), нам пришлось продумывать метод удаленного подключения к рабочим станциям Linux без ограничения по времени сеанса.

Удаленное управление Linux

Вопрос обратного подключения (к машинам за NAT) с легкостью решается созданием на нашей стороне OpenVPN-сервера к котором у клиенты собственно и подключаются, а вот с доступом к графической консоли возникли некоторые сложности методы обхода которых мы в данной статье и рассмотрим.

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

Во-первых, вам понадобится установить необходимое ПО:

# aptitude install x11vnc

Во-вторых, зададим пароль для удаленного доступа:

# x11vnc -storepasswd /etc/x11vnc.passwd

Длина пароля ограничена шестью символами, поэтому рекомендуем вам ограничить доступ по сети к управляющему порту 5900, например при помощи iptables.

Перейдем к настройке x11vnc. В нашем случае для авторизации пользователя в системе используется дисплейный менеджер SDDM, если вы вызовите список процессов системы, то вы обратите внимание, что при каждом запуске sddm генерируется случайный токен авторизации вида:

-auth /var/run/sddm/{cc7aa561-db33-4908-9d45-d8026747d25a}

И в простейшем случае для реализации возможности подключения к текущей сессии достаточно выполнить команду:

# /usr/bin/x11vnc -display :0 -auth $(ls /var/run/sddm/{*}) -rfbauth /etc/x11vnc.passwd -o /var/log/x11.log

После этого вы можете подключиться к графической консоли пользователя с удаленного компьютера выполнив команду:

$ vncviewer <remote-pc-ip>

Обратите внимание, что отключившись от сессии x11vnc завершит свою работу. Для того чтобы x11vnc не завершал свою работу, а продолжал работать в фоновом режиме в качестве демона немного модифицируем командную строку запуска, добавив несколько параметров:

-bg — работать в фоновом режиме;
-shared — разрешить подключаться одновременно нескольким пользователям;
-dontdisconnect — не отключать подключенных пользователей при подключении нового;
-many — не завершать работу сервера после отключения первого клиента.

# /usr/bin/x11vnc -display :0 -bg -shared -dontdisconnect -many \
-auth $(ls /var/run/sddm/{*}) -rfbauth /etc/x11vnc.passwd -o /var/log/x11.log

Теперь нам необходимо оформить эту команду в виде демона для запуска при старте системы. Для этого создайте файл /etc/systemd/system/x11vnc.service содержащий следующие параметры:

[Unit]
Description=Remote control x11vnc
After=graphical.target

[Service]
Restart=always
RestartSec=30
Type=simple
ExecStart=-/bin/bash -c "/usr/bin/x11vnc -display :0 -shared -dontdisconnect -many \
-auth $(ls /var/run/sddm/{*}) -rfbauth /etc/x11vnc.passwd -o /var/log/x11.log"

[Install]
WantedBy=graphical.target

Настраиваем запуск службы при старте системы:

# systemctl enable x11vnc

Теперь вы можете подключаться к удаленной сессии пользователя и осуществлять техническую поддержку без использования проприетарных решений наподобие TeamViewer.

Оставьте комментарий

Вы должны быть вошедший в чтобы отправить комментарий