Утилита для человеческого shadow подключения неадмина к RDP сессиям пользователей в WinServer 2012R2
Проблема в период карантинной работы предприятия стала следующей: действительно нужно минимизировать количество посещений кабинетов специалистами, обслуживающими и консультирующими по прикладному ПО, да и сказать откровенно, пользователи частенько злоупотребляют помощью специалистов не желая вникать в сам вопрос, мол «придут — помогут — сделают, а я пока покурю/попью кофе и т.п.». Консультация по телефону при совместном доступе к серверу эффективнее, если просматривать удаленный экран.

Уже после «изобретения» нашего велосипеда подвернулась вменяемая информация на тему статьи: RDS Shadow – теневое подключение к RDP сессиям пользователей в Windows Server 2012 R2 или Режим shadow непривилегированного пользователя в windows server или Делегируем управление RDP-сеансами. Все они подразумевают применение консоли, даже с элементами простого диалога.
Вся изложенная ниже информация предназначена для тех, кто нормально переносит ненормальные извращения для получения нужного результата, изобретая ненужные способы.
Чтобы «не тянуть кота за хвост», начну с последнего: велосипед работает у обычного пользователя с помощью утилиты AdmiLink, за что ее автору и спасибо.
I. Консоль и shadow RDP.
Так как использование с админскими правами консоли Server Manager -> QuickSessionCollection -> щелкнув по сессии интересующего пользователя, выбрав в контекстном меню Shadow (Теневая копия) для персонала, инструктирующего по работе с ПО, — не вариант, был рассмотрен другой «деревянный» способ, а именно:
1. Узнаем RDP id сессии:
Причем «| findstr Administrator» было удобно только когда ты знаешь, что именно Administrator тебе нужен, либо использовать только первую часть для лицезрения всех залогинившихся на сервере.
2. Подключаемся к этой сессии, при условии что в доменных групповых политиках параметр «Устанавливает правила удаленного управления для пользовательских сеансов служб удаленных рабочих столов» выбран параметр как минимум «Наблюдение за сеансом с разрешения пользователя» (подробнее):
Прошу обратить внимание что в списке будут только логины пользователей.
Повторюсь что без админских прав вы получите следующее:
Но для предварительной отладки программы, о которой пойдет речь, я использовал учетку с правами администратора.
Итак постановка задачи: создание некого простого графического интерфейса для подключения к теневому сенсу пользователя с его разрешения, отправка сообщения пользователю. Среда программирования выбрана Lazarus.
1. Получаем полный доменный список пользователей «логин» — «полное имя» у админа, либо опять таки через консоль:
никто не запрещает даже так:
Скажу сразу, что именно у Lazarus оказалось проблема с обработкой этого файла, так как по умолчанию его кодировка UCS-2, поэтому пришлось просто преобразовать вручную в обычный UTF-8. В структуре файла много табуляций, вернее множество пробелов, которые было решено все-таки программно обработать, рано или поздно задачка с кодировкой будет решена, и файл будет программно обновляться.
Итак, в задумке папка, доступная для пользователей программы, например c:\test, в которой будет 2 файла: первый с login и fullname, второй с id_rdp и login пользователей. Далее эти данные обрабатываем как можем:).
А пока для ассоциирования со списком сессий переносим это (login и fullname) содержимое в массив:
Прошу извинения за «много кода», следующие пункты будут лаконичнее.
2. Аналогично методом из предыдущего пункта считываем результат обработки списка в элемент StringGrid, при этом приведу «значимый» кусок кода:
2.1 Получаем актуальный список RDP сессий в файл:
2.2 Обрабатываем файл (указан только значимые строки кода):
3. Непосредственно само подключение при клике на строку с пользователем и номером его сеанса:
4. Сделано еще пару украшательств типа сортировки по клику на radiobutton, и сообщения пользователю, либо всем пользователям.
→ Полный исходный код можно увидеть здесь
III. Применение AdminLink — что я увидел:
Подключаемся к рабочему столу пользователя Windows 10 с помощью теневого подключения
Помимо использования Remote Assistance, вы можете удаленно подключиться к рабочему столу пользователя Windows 10 с помощью теневого RDP подключения ( Remote Desktop Shadowing ). Большинство администраторов так или иначе пользовались этим функционалом для подключения к сессиям пользователей на терминальных RDS серверах с Windows Server 2012 R2 / Server 2016. Однако далеко не все знают, что теневое подключение можно использовать для удаленного просмотра и взаимодействия с рабочим столом пользователя и на десктопной Windows 10. Рассмотрим, как это работает.
Как вы помните, если попытаться удаленно подключится к компьютеру с Windows 10 через RDP, то сессия пользователя, работающего локально выбивается (даже если вы включите возможность использования нескольких одновременных RDP сессий в Windows 10 ). Однако вы можете подключится непосредственно подключиться к консольной сессии пользователя без блокировки его сеанса.
Предположим, вам нужно подключиться с сервера Windows Server 2012 R2 к рабочему столу пользователя, работающего локально за рабочей станцией с Windows 10.
Для теневого подключения к сессии пользователя нужно использовать стандартную RDP утилиту mstsc.exe . Формат команды такой:
Также можно использовать одну из опций:
- /prompt – запросить имя и пароль пользователя, под которым выполняется подключение (если не указано, подключение выполняется под текущим пользователем).
- /control – режим взаимодействия с сеансом пользователя. Если параметр не задан, вы подключитесь в режиме просмотра (наблюдения) сессии пользователя, т.е. вы не сможете управлять его мышью и вводить данные с клавиатуры;
- /noConsentPrompt – не запрашивать у пользователя подтверждение на подключение к сессии.
Режим теневого подключения (нужно ли запрашивать подтверждение пользователя, и возможно управления в сессии или только наблюдение) настраивается с помощью групповой политики или редактирования реестра.
Политика находится в разделе Конфигурация компьютера ->Административные шаблоны –> Компоненты Windows –> Службы удаленных рабочих столов –> Узел сеансов удаленных рабочих столов –> Подключения (Policies -> Administrative Templates -> Windows components -> Remote Desktop Services -> Remote Session Host -> Connections) и называется « Установить правила удаленного управления для пользовательских сеансов служб удаленных рабочих столов » (Set rules for remote control of Remote Desktop Services user sessions).
Вместо включения политики можно выставить значение dword ключа с именем Shadow в ветке реестра HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services. Допустимые значения:
- 0 – запретить удаленное управление;
- 1 — полный контроль с разрешения пользователя;
- 2 — полный контроль без разрешения пользователя;
- 3 — наблюдение за сеансом с разрешения пользователя;
- 4 — наблюдение за сеансом без разрешения пользователя.
По умолчанию данный ключ не задан и теневое подключение осуществляется в режиме полного контроля с разрешения пользователя.
Чтобы удаленно подключится к компьютеру через теневое подключение, у подключающейся учетной записи должны быть права администратора на компьютере, а в свойствах системы включен удаленный рабочий стол (RDP).
Запросим удаленно список сессий на рабочей станции Windows 10 командой:
Как вы видите, на данном компьютере имеется одна консольная сессия пользователя с идентификатором >
Итак, попробуем удаленно подключиться к сессии пользователя через теневое подключение. Выполните команду:
Mstsc /shadow:1 /v:192.168.11.60
На экране пользователя Windows 10 появится запрос:
Запрос на удаленное подключение
Username запрашивает удаленный просмотр вашего сеанса. Вы принимаете этот запрос.
Если пользователь разрешит соединение, вы подключитесь к его консольному сеансу и увидите его рабочий стол. Вы будете видеть все действия пользователя, но не сможете взаимодействовать с его сессией.
Совет . Для завершения теневой сессии нажмите на компьютере alt+* или ctrl+* на RDS сервере.
Если проверить сетевые соединения с помощью TCPView, можно увидеть, что взаимодействие идет через RemoteRPC (а не по протоколу RDP с портом TCP 3389). Т.е. для подключения используется случайный TCP порт из высокого диапазона RPC. На стороне подключающегося компьютера соединение устанавливает mstsc.exe, на стороне клиента подключение обрабатывает rdpsa.exe или rdpsaproxy.exe (в зависимости от билда Windows 10). Поэтому на клиенте должен быть включен RemoteRPC:
Функционал теневого подключения Remote Desktop Shadowing работает в Windows 10 / 8.1 и Windows Server 2012 R2 /2016. Чтобы теневое подключение работало на клиентах с Windows 7 SP1 (Windows Server 2008 R2) нужен RDP клиент версии 8.1 – поэтому придется установить обновление KB2830477 (требует наличия установленных KB2574819 и KB2857650).
Таким образом Remote Desktop Shadowing можно использовать как аналог Remote Assistance (Удаленный помощник) или TeamViewer для локальной или корпоративной сети.
RDS Shadow – подключаемся к сессии пользователя в Windows 2012 R2
Спешим поделиться хорошей новостью: Microsoft вернула функционал Remote Desktop Shadowing в Windows Server 2012 R2 и Windows 8.1! Напомним, что режим Shadow (теневой сеанс) – может использовать администратором для просмотра и управления активной терминальной сессией любого пользователя. Этот режим работы поддерживается практически с первых версий терминального сервера Microsoft и неожиданно был убран в релизе Windows Server 2012 (связано с переносом стека rdp из режима ядра в пользовательский режим).
Кроме того, у режима RD Shadow и rdp клиента появился ряд новых интересных возможностей. Полный список опций rdp клиента mstsc.exe, определяющих возможность удаленного подключения к сессии конечного пользователя:
Mstsc.exe [/shadow:sessionID [/v:Servername] [/control] [/noConsentPrompt]]
/shadow:ID – подключится к терминальной сессии с указанным ID
/v:servername – имя терминального сервера (если не задано, используется текущий)
/control – возможность взаимодействия с сеансом пользователя (если не указано, используется режим просмотра сессии пользователя).
/noConsentPrompt – не запрашивать у пользователя подтверждение на подключение к сессии
Ограничения теневых сеансов RDS в Windows 2012 R2
- Подключаться к чужим сессиям может только администратор сервера. Делегировать эти права обычным пользователем нельзя
- RDS Shadow не будет работать в сетях на базе рабочих групп
Remote Desktop Shadow — работа в GUI
Подключиться к сессии пользователя можно с помощью утилиты mstsc.exe или непосредственно из консоли Server Manager. Для этого в консоли Server Manager откройте коллекцию QuickSessionCollection.
Появится окно параметров теневого подключения. Возможен просмотр (View) и управление (Control) сессией. Кроме того можно включить опцию Prompt for user consent (запросить согласие на подключение у пользователя).
Если выбрана опция «Запросить подтверждение», в сессии у пользователя появится запрос:
Winitpro\administrator is requesting to view your session remotely. Do you accept the request?
Если пользователь подтвердит, подключение, администратор увидит его рабочий стол и сможет взаимодействовать с ним.
Если же пользователь отклонит подключение, появится окно:
Если же попытаться подключится к сессии пользователя без запроса подтверждения, появится ошибка, сообщающая что такое поведение настроено групповой политикой:
Параметры удаленного управлениями терминальными сессиями пользователя настраиваются политиками Set rules for remote control of Remote Desktop Services user sessions, которые находится в разделе Policies -> Administrative Templates -> Windows components -> Remote Desktop Services -> Remote Session Host -> Connections в пользовательской и «компьютерной» секциях GPO.
Этой политикой можно настроить следующие варианты подключения по RD Shadow:
- No remote contol allowed — удаленное управление запрещено
- Full Control with users’s permission — полный контроль с разрешения пользователя
- Full Control without users’s permission — полный контроль без разрешения пользователя
- View Session with users’s permission – наблюдение за сеансом с подтверждением
- View Session without users’s permission – наблюдение за сеансом без подтверждения
RDS Shadow из Powershell
Воспользоваться функционалом Remote Desktop Services Shadow можно и из Powershell.
В первую очередь покажем, как получить список сессий на терминальном сервере (сесии пользователей будут сгруппированы в группы в зависимости от их статуса):
На данном сервере мы обнаружили три активных терминальных сессии. Подключимся к сессии пользователя с ID сессии 3:












