Утилита Shadow
Как подключиться к сессии пользователя (просмотреть экран в режиме «Теневой копии») на Windows Server 2008?
Чтобы наблюдать за другим сеансом необходимо использовать встроенную утилиту Shadow.
Например:
Имеется VDS сервер с ОС Windows Server 2008 Standart.
На нём созданы два пользователя Администратор и User.
Допустим имя нашей учётной записи администратор и мы хотим посмотреть экран сеанса пользователя user.
Чтобы узнать ID сеанса, введите команду query user в командной строке:
Итак, зная ID сеанса, подключимся к пользователю user в режиме «Теневой копии»:
Нажмите «Пуск» —→ «Выполнить» —→ «shadow 3» —→ «Ок»:
Далее увидите следующее сообщение:
В этот момент у пользователя user всплывет окно запроса удаленного управления:
У нас появится доступ, как только пользователь user примет запрос.
Параметры подключения
Чтобы подключаться без запроса, необходимо изменить параметры удалённого управления конкретного пользователя, в данном примере это user.
Перейдите по ветке: «Пуск» —→ «Администрирование» —→ «Управление компьютером» —→ «Локальные пользователи и группы» —→ «Пользователи».
Кликните дважды по имени пользователя и выберите вкладку «Удалённое управление»:
В параметре «Запрашивать разрешение пользователя» снимите галочку и выберите желаемый уровень управления сеансом пользователя.
Нажмите «Применить» —→ «Ок»
Вы можете использовать возможности теневых подключений (Remote Desktop Shadowing) для удалённого подключение к сессиям пользователей на компьютерах Windows. Это функционал является по сути аналогом Remote Assistance и позволяет администраторам удаленно просматривать и взаимодействовать с рабочим столом пользователей как на десктопных версиях (Windows 11 или 10), так и на RDS серверах Windows Server.
Содержание:
- Настройка клиентов Windows для удаленного подключения через теневые сессии
- Удаленное подключение к сессии пользователя Windows через RDP Shadowing
Настройка клиентов Windows для удаленного подключения через теневые сессии
Вам нужно определенным образом настроить компьютеры, к которым вы хотите подключаться через теневое подключение.
- Включите удаленный рабочий стол (RDP) на компьютерах пользователей (вручную или через GPO);
- Ваша учетная запись должна обладать правами локального администратора на компьютере пользователей (вы можете добавить пользователя в группу администраторов вручную или с помощью групповых политик);
- Настройте режим теневого подключения (нужно ли запрашивать подтверждение пользователя, и возможно управления в сессии или только наблюдение). Можно настроить режим через групповую политику “Установить правила удаленного управления для пользовательских сеансов служб удаленных рабочих столов” (Set rules for remote control of Remote Desktop Services user sessions) в разделе Конфигурация компьютера -> Административные шаблоны –> Компоненты Windows –> Службы удаленных рабочих столов –> Узел сеансов удаленных рабочих столов –> Подключения (Policies -> Administrative Templates -> Windows components -> Remote Desktop Services -> Remote Session Host -> Connections).
Доступны 5 режимов:0 – запретить удаленное управление;
1 — полный контроль с разрешения пользователя;
2 — полный контроль без разрешения пользователя;
3 — наблюдение за сеансом с разрешения пользователя;
4 — наблюдение за сеансом без разрешения пользователя. - Вы можете включить нужный режим напрямую в реестре. Отредактируйте реестр вручную или с помощью команды (в этом примере мы установили 4 режим – разрешить просмотр сеанса пользователя без уведомления):
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v Shadow /t REG_DWORD /d 4
По умолчанию данный теневое подключение выполняется в режиме полного контроля с разрешения пользователя.
- Настройте правила Windows Defender Firewall, разрешающие трафик теневых подключений по сети. Для трафика session shadowing в Windows вместо стандартного порта 3389/RDP используются порты 139/TCP, 445/TCP и диапазон динамических RPC портов (49152 по 65535). Чтобы разрешить входящий трафик теневых подключений, нужно включить два преднастроненных правила в Windows:
File and Printer Sharing (SMB-In)
и
Remote Desktop - Shadow (TCP-In)
. Последнее правило разрешает удаленный доступ к процессу
RdpSa.exe
. Вы можете включить правила Windows Defender на компьютерах пользователей через GPO или с помощью PowerShell командлета Enable-NetFirewallRule.
Удаленное подключение к сессии пользователя Windows через RDP Shadowing
Рассмотрим, как удаленно подключиться рабочему столу сессии другого пользователя на удаленном компьютере Windows через теневые подключения RDP. В этом примере я покажу, как подключиться с компьютера Windows 11 к сессии пользователя на рабочей станции пользователя с Windows 10.
Для теневого подключения к сессии пользователя используется стандартная RDP утилита mstsc.exe. Формат команды такой:
Mstsc.exe /shadow:<ID сессии> /v:<Имя или IP адрес компьютера>
Также можно использовать одну из опций:
- /prompt – запросить имя и пароль пользователя, под которым выполняется подключение (если не указано, подключение выполняется под текущим пользователем).
- /control – режим взаимодействия с сеансом пользователя. Если параметр не задан, вы подключитесь в режиме просмотра (наблюдения) сессии пользователя, т.е. вы не сможете управлять его мышью и вводить данные с клавиатуры;
- /noConsentPrompt – не запрашивать у пользователя подтверждение на подключение к сессии.
Теперь нужно узнать имя пользователя и ID его сессии на удаленном компьютере (если пользователь работает непосредственно за консолью компьютера, то ID его сессии всегда будет равно 1).
Выведем список сессий пользователей на удаленном компьютере (это может быть как десктопный компьютер с Windows 11/10 или Windows Server с ролью Remote Desktop Services Host (RDSH).
qwinsta /server:wks-w10b01
В данном примере видно, что на компьютере залогинен один пользователь a.novak, который работает непосредственно за компьютером (
SESSIONNAME=console
). Идентификатор сессии ID=1.
Чтобы подключиться к рабочему столу этого пользователя через теневое подключение, выполните команду:
mstsc.exe /shadow:1 /v:wks-w10b01
На экране пользователя Windows появится запрос подтверждения подключения администратора к его сеансу: Запрос на удаленное подключение Username запрашивает удаленный просмотр вашего сеанса. Вы принимаете этот запрос.
Если служба TermService на удаленном компьютере отключена, то при попытке удалённого подключения через RDP shadow появится ошибка:
The version of Windows running on this server does not support user shadowing
Если пользователь разрешит соединение, вы подключитесь к его консольному сеансу и увидите его рабочий стол. Вы будете видеть все действия пользователя, но не сможете взаимодействовать с его сессией. Если вы хотите управлять его сессией, добавьте в команду параметр /control. В этом случае надпись в заголовке окна сменится с
Viewing username (sessionID 1) on computername
на
Controlling…
В данном случае вы подключились непосредственно подключиться к консольной сессии пользователя без блокировки его сеанса. При удаленном подключении к Windows 10 через обычный RDP, то сессия локального отключается (даже если вы включите возможность использования нескольких одновременных RDP сессий в Windows 10).
Если сессия пользователя заблокирована, или появляется запрос повышения привилегий UAC, то без исопльзования режима
mstsc /control
окно с теневой сессией становится черным и на нем появляется символ паузы.
Теневая сессия переходит в приостановленное состояние, если у пользователя появляется запрос UAC на Secure desktop. После того, как пользователь подтвердит действие UAC, ваша сессия возобновится.
Чтобы развернуть окно теневой сессии во весь экран, воспользуйтесь комбинацией клавиш Ctrl + Alt + Break.
Для завершения теневой сессии нажмите на компьютере
alt+*
(или
ctrl+*
на RDS сервере).
Вы можете оповестить пользователя о том, что кто-то удаленно подключится к его сессии через теневое подключение с помощью следующего PowerShell скрипта:
while($true){
if (Get-Process -Name "RdpSa" -ErrorAction SilentlyContinue){[console]::beep(1000,500);Write-Host "RdpSa is running at $(Get-Date)"}
Start-Sleep -Seconds 1
}
В данном примере мы оповещаем пользователя звуковым оповещением, но вы можете вывести всплывающее уведомление на рабочий стол. Можно запустить этот PowerShell скрипт как службу Windows.
Вы можете получить историю теневых подключений к компьютеру пользователя из журнала событий Windows. Все интересующие вас логи находятся в разделе Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational:Event Viewer
- Event ID 20508 — Shadow View Permission Granted
- Event ID 20503 — Shadow View Session Started
- Event ID 20504 — Shadow View Session Stopped
Вы можете получить логи теневых подключений к компьютеру с помощью PowerShell:
$EventIds = 20508,20503,20504
Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational';ID=$EventIds}
Функционал теневого подключения Remote Desktop Shadowing работает в Windows 11/10/ 8.1 и Windows Server 2022/2019/2016/2012 R2. Таким образом Remote Desktop Shadowing можно использовать как аналог Remote Assistance (Удаленный помощник) или TeamViewer/Anydesk для локальной или корпоративной сети.
In this article we will go through configuration of Remote Desktop Shadowing. We will also discuss pros and cons of this approach, since it is not without the problems.
Remote Desktop Shadowing enables administrators to remotely connect to users session. This can be very useful feature, especially if you maintain specific networks.
Let’s get to work, and configure Remote Desktop Shadowing.
This test is done on Windows 11 Enterprise with 23H2 installed.
Enable Remote Desktop Shadowing on Windows
First, on a machine you wish to connect to – Settings – System – About and under related links select Advanced system settings
Navigate to Remote tab, and under Remote Desktop enable Allow remote connections to this computer. Before we click on Apply | OK click on Select Users and make sure that user you plan to use for RDP has the rights to connect! I’m using same user on both machines with same password in this lab!
When done click OK | Apply | OK
Group Policy
Now, in search type Run – when run opens, inside it type gpedit.msc and press OK.
Group Policy editor should open.
Navigate to Computer Configuration -> Administrative Templates -> Windows components -> Remote Desktop Services -> Remote Desktop Session Host -> Connections and double click on Set rules for remote control of Remote Desktop Services user sessions
Select Enabled and from the options list select Full Control without user’s permission. Apply | OK
Optional: Do the same through registry
You can achieve the same through registry by opening elevated command prompt and typing
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v Shadow /t REG_DWORD /d 4
If you wish to remove the registry key at one point you can use
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v Shadow /f
Firewall
Now, the scary thing is, RDP shadowing doesn’t use RDP port 3389, it uses 139/TCP, 445/TCP (yes, those are SMB ports) and RPC ports in range 49152-65535
Control Panel – Windows Defender Firewall – select Advanced settings
Two rules need to be enabled in Inbound Rules – File and Printer Sharing (SMB-In) and Remote Desktop – Shadow (TCP-In). You may optionally create a new rule and open RPC port range I mentioned earlier if
If a rule doesn’t have white checkmark in green orb, then right click on it, select Enable Rule as depicted below.
Services
Before we proceed, make sure that Remote Desktop Services (TermService) is Running on the computer you wish to connect to (Control Panel – Windows Tools – Services)
For me, Shadow RDP worked even without these enabled in my LAB, but if you have problems connecting to remote desktop, open Settings – Network & Internet – Advanced network settings – Advanced sharing settings and make sure that Network discovery and File and Printer sharing are on. As I said, in my lab, File and printer sharing was off, and Shadow RDP worked, until it at once didn’t – this setting helped. Set this to on, only for your current profile.
Connect to Shadow RDP mode
To connect to shadow RDP command goes as follows
Mstsc.exe /shadow:<Session ID> /v:<Computer name or IP address>
Now, following switches can be added to the command
/prompt – request a users credential, /control – you’ll be able to interact with user session. Without this switch, you will be using view only mode.
/noConsentPrompt – user will not be notified to allow connection.
Now, you will ask yourself, yes, but how do I know user session id? Usually if user is logged into computer, session ID is 1.
we can confirm that through Powershell (elevated) from remote computer which we will use to connect to shadow RDP by typing in following
qwinsta /server:IPorNAMEOFPCYOUWISHTOCONNECTTO
We can see that on remote pc we wish to connect to on IP 192.168.100.150, there is console session 1 active with user Zeljko logged in.
Ok, let’s test Shadow RDP
Now, if we run mstsc command from the beginning now that we have Session ID parameter, it will look like this.
Connection will start, and it will wait for user input, to confirm that you can connect
On user screen you will see this confirmation screen
If you use some of the switches we mentioned before, like /noConsentPrompt you will be able to connect to remote session without user approval.
Security aspects
While this is very useful in some scenarios – let’s say you have a delicate app that cannot change session or will break (there are apps that are written in strange way) or you wish to assist directly user with the problem he/she is having, this is huge security issue. Especially connecting without consent.
So, in the process of configuration you already saw, what you can do to mitigate this in your network – disable some firewall services, group policy or registry changes.
You can also notify user by setting following script as windows service. It will notify user by simple beep when somebody connects to their session
while($true){
if (Get-Process -Name "RdpSa" -ErrorAction SilentlyContinue){[console]::beep(1000,500);Write-Host "RdpSa is running at $(Get-Date)"}
Start-Sleep -Seconds 1
}
You can also monitor Event Viewer and event IDs 20503,20504,20508. You can find these in following section of Event Viewer – Microsoft | Windows | TerminalServices-RemoteConnectionManager | Operational
Conclusion
We learned how to configure Shadow RDP, but we also learned that it can be potential security issue, and through configuring it, we learned how to mitigate it, if it is dangerous for our environment.
Disclaimer
Добрый день! Подскажите, возможно ли теневое подключение на терминальный сервер 2008 r2? Подключение пытаюсь осуществить с windows 10.
Изучал вопрос в интернете, толком так и ни у кого и не получилось добиться успеха (в комментариях).
На данный момент получаю ошибку:
Ошибка теневого доступа
В версии windows, установленной на этом сервере не поддерживается теневой доступ пользователей.
-
Вопрос задан
-
191 просмотр
Пригласить эксперта
Попробуй использовать старую версию mstsc.exe или shadow.exe (прямо скопируй его с установочного диска, там он кажется в отдельном каталоге с нужными dll лежал) или скопируй из system32 сервера, только придется подбирать, какую именно dll копировать.
Войдите, чтобы написать ответ
-
Показать ещё
Загружается…
Минуточку внимания
Symptoms
Upon attempting to shadow user’s RDP session running on RD Session Host on Windows Server 2008 or Windows Server 2008 R2 the following error appears:
Cause
The issue is caused by Microsoft tools incompatibility: shadow.exe is being used on Windows Server 2008 R2 and lower and mstsc /shadow on Windows 2012 R2 and higher .
Resolution
Should you need to shadow a user’s session running on Windows Server 2008 or 2008 R2, RAS console must also be running on Windows Server 2008 or 2008 R2. If the RAS console is installed on a later version of Windows Server, shadowing will not work.
As a way around, you can install RAS Console component on separate Windows Server 2008 or 2008 R2, and then use this console to remotely connect to your farm and manage RDS sessions running on Windows Server 2008 or 2008 R2. Please note that to finish a remote control session, the administrator must log off from the RAS console remote session. This is a limitation of shadow.exe utility from Microsoft that doesn’t take any arguments.