TeamViewer из подручных материалов

Всем привет!

Сегодня хочу рассказать о двух случайно обнаруженных «фичах» известных протоколов, которые позволили сложиться «пазлу» из темы статьи.

И так, у сотрудника техподдержки есть необходимость подключаться к рабочему столу пользователя, что бы совместно что-то сделать. Раз нет TeamViewer, значить надо использовать что-то похожее, например VNC.Тут же «выплывают» проблемы:

  1. компьютер пользователя может быть недоступен для компьютера сотрудника, например, находится в домашней сети за роутером (который так же может быть не доступен из внешних сетей)

  2. пользователю нужно не только заранее установить VNC Server на свой компьютер, но и задать (и не забыть:) пароль от него, что бы сообщить его, когда понадобится, сотруднику

Эти проблемы решает первая «фича» — оказалось, что VNC позволяет организовать подключение «наоборот», не с клиента на сервер, а с сервера на клиент. В системе Windows пользователь может установить, например, пакет TightVNC оставляя все опции, «по умолчанию», и, не меняя и не выясняя случайно сгенерированный пароль, который теперь никому не понадобится:

af90b2e4037750a80b3ac8ea392e9e49.jpg

Этот же пакет нужно будет установить сотруднику техподдержки, серверная часть ему не нужна, можно убрать ее из автозагрузки, а понадобится TightVNC Viewer запущенный в Listening mode

195dc90671ae21386a67ad6ce8babfff.jpg

Теперь, по просьбе сотрудника техподдержки, пользователю будет достаточно выбрать меню Attach Listening Viewer

cd205b53d9ea4bf81ba75cdb1c53c453.jpg

указать «ip_адрес_компьютера_сотрудника_техподдержки» и нажать на кнопку «Attach»

bd9076414402d56293fb2fc0d1fe6aaf.jpg

Если пользователи работают в Linux, то необходимой функциональностью обладает пакет x11vnc, который в debian ориентированных дистрибутивах может быть установлен командой:

$ sudo apt install x11vnc

Для предоставления своего рабочего стола сотруднику техподдержки пользователю будет достаточно набрать в терминале:

$ x11vnc -connect ip_адрес_компьютера_сотрудника_техподдержки

Если и сотрудник техподдержки работает в Linux, он может установить пакет tigervnc-viewer

$ sudo apt install tigervnc-viewer

и, перед оказанием помощи пользователю, запустить в терминале команду:

$ vncviewer -listen

СТОП! Как это «ip_адрес_компьютера_сотрудника_техподдержки»? А если (даже наверняка) это такой же «серый» адрес в локальной сети за роутером, как и у сотрудника?

Эту проблему решает вторая «фича» — оказалось что сервис SSH не только позволяет, благодаря опции GatewayPorts yes, установить подключение с компьютера сотрудника к SSH серверу и назначить внешний TCP порт для встречных соединений, которые можно «направить» в VNC viewer, но и сгенерировать этот номер динамически.

Команда будет выглядеть вот так (обратите внимание на 0, там где указывается номер внешнего порта):

ssh -R 0:localhost:5500 логин_сотрудника_техподдержки@ip_адрес_ssh_сервера

И, да, VNC viewer, в режиме listen, ожидает, по умолчанию, подключения на порту 5500, и теперь его можно ограничить только интерфейсом localhost

Теперь, если «ip_адрес_ssh_сервера» публичный, пользователи смогут предоставить свой рабочий стол, указав вместо «ip_адреса_компьютера_сотрудника_техподдержки» — «ip_адрес_ssh_сервера: сгенерированный_номер_порта»

Некоторой проблемой оказалось «выяснение» назначенного динамического порта, дело в том что в Linux терминале строка:

Allocated port NNNNN for remote forward to localhost:5500

прекрасно отображается, и сотрудник техподдержки может продиктовать его пользователю, но в Windows, не все SSH клиенты (например PuTTY) это делают, тут могу посоветовать MobaXTerm в нем все как в Linux

В завершении статьи остается только посочувствовать пользователям, которые вместо «каликанья» по «иконке» и сообщения оператору номера подключения в TeamViewer приходится запускать «страшные» программы с непонятными адресами, но мы на работе «боремся» с этим создав bat файл для пользователей Windows и используя Ansible для рабочих станций Linux, после которых на рабочем столе пользователя тоже появляется «иконка», по которой можно «кликнуть» и ввести там 5 цифр, названных сотрудником техподдержки. Если статья вызовет интерес, можно будет написать продолжение на эту тему.

Еще, из «нехорошего», трафик между пользовательским VNC и ssh сервером «летит» нешифрованный, тоже в планах поправить в будущем.

Так же, вероятно что MeshCentral или RustDesk окажутся более удобными решениями для тех, кто ищет альтернативу TeamViewer, буду рад почитать статьи на эту тему.

На этом все, всех с Новым годом, всех благ!

© Habrahabr.ru