Настройка лимитов (таймаутов) для активных/отключенных RDP/RDS сессий в Windows

Когда пользователь со своего компьютера закрывает окно своей RDP/RDS сессии в терминальном клиенте (mstsc.exe, RDCMan или RDP HTML WEB клиенте ) простым нажатием по крестику в окне, без выполнения выхода (logoff), его сессия переходит из активного режима в режим disconnected (разъединённый сеанс). В этом режиме все запущенные пользователем программы, открытые документы и окна продолжают работать на удаленном сервере и потреблять ресурсы.

По-умолчанию RDP сессия пользователя в Windows может находится в состоянии disconnected до перезагрузки компьютера или явного ее завершения пользователем или администратором. Это довольно удобно, т.к. пользователь может в любой момент подключиться к своей старой сессии и продолжить работу с запущенными программами и открытыми документами.

На следующем скриншоте видно, что отключенные сессии пользователей на RDS сервере с Windows Server 2019 потребляют около 35% памяти сервера.

disconnected сесии не отключаются на rds/rdp сервере

Кроме того незавершенные сессии могут блокировать открытые файлы на файловых серверах, вызывать проблемы с корректным сохранением данных в приложениях, профилях или User Profile Disks . Кроме наличие старых RDP сессий часто вызывает проблему блокировки учетной записи пользователей в домене после смены пароля (когда RDS сессии продолжает работать под старыми паролем пользователя).

С помощью команды quser можно узнать, когда начата RDP сессия пользователя, длительность простоя и статус сессии.

quser - длительность rdp сеансов, простоя rdp сессий

Также вы можете вывести информацию о длительности сессий пользователей в RDS фермы с помощью PowerShell скрипта (укажите FQDN вашего сервера RDS Connection Broker ):

$connectionBrocker = “MSK-RDSMAN.WINITPRO.RU"
Get-RDUserSession -ConnectionBroker $connectionBrocker |select-object -Property CollectionName, HostServer, DomainName, UserName, ServerIPAddress, CreateTime, DisconnectTime,  SessionState, IdleTime , SessionID , `
@{Name='SessionAge ([days.]hours:minutes)';Expression={ ((get-date ) - $_.CreateTime) } }

Вы можете настроить максимальную длительность активных, отключенных и простаивающих (без активности пользователя) сессии для Remote Desktop Services.

Автоматическое завершение неактивных RDP сессий в Windows

Для автоматического завершения отключенных RDP/RDS сессий через определенный промежуток времени, вам нужно правильно настроить лимиты (таймауты).

Если у вас развернута полноценная Remote Desktop Services ферма на Windows Server , вы можете настроить параметры таймаутов сессий пользователей в настройках RDS коллекций на вкладке Session .

Укажите время, через которое нужно завершить отключенный сеанс в параметре End a disconnected session (по умолчанию длительность RDP сеанса не ограничена – Never). Также вы можете выставить максимальную длительность активной RDP сессии ( Active session limit ) и отключение бездействующего сеанса ( Idle session limit ). Это жесткие таймауты применяются для всех сессий в RDS коллекции.

настройка таймаутов сесий и параметров переподключения на rd session host

В Windows Server 2012 R2/2016/2019/22 можно настроить таймауты RDP сессий с помощью групповых политик. Можно использовать как редактор доменных GPO gpmc.msc , так и редактор локальных групповых политик ( gpedit.msc ) на конкретном RDS сервере ( или на десктопной версии Windows, если вы разрешили к ней множественные RDP подключения ).

Параметры таймаутов RDP сессий находятся в разделе GPO Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Session Time Limits (Конфигурация компьютера -> Политики -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Ограничение сеансов по времени). Доступны следующие политики таймаутов:

  • Set time limit for disconnected session (Задать ограничение по времени для отключенных сеансов);
  • Set time limit for active but idle Remote Desktop Services sessions (Задать ограничение времени для активных, но бездействующих сеансов служб удаленных рабочих столов) – политика позволяет завершить простаивающие RDP сессии, в которых отсутствует ввод со стороны пользователя (движение мышкой, ввод символов с клавиатуры);
  • Set time limit for active Remote Desktop Services sessions (Задать ограничение по времени для активных сеансов служб удаленных рабочих столов) – максимальный срок для любой (даже активной) RDP сессии пользователя, после которого она переводится в состояние disconnected;
  • End Session when time limits are reached (Завершать сеанс при достижении ограничения по времени) – через какое время нужно завершать RDS сессию (logoff) вместо перевода ее в disconnected;
  • Set time limit for logoff of RemoteApp sessions (Задать предел для выхода из сеансов RemoteApp).

политики ограничения времени rdp сеансов по времени

По умолчанию эти параметры не настроены. Чтобы автоматически завершать отключенные RDP сеансы пользователей через 8 часов, включите политику “ Set time limit for disconnected session ” = Enabled , и в выпадающем списке выберите 8 часов .

политика Set time limit for disconnected session

Сохраните изменения и обновите настройки групповых политик в Windows (gpupdate /force). Новые настройки таймаутов будут применяться только к новым RDP сеансам, текущие сеансы придется завершить вручную.

Настройки GPO имеют более высокий приоритет, чем настройки таймаутов в коллекции RDS.

Аналогичные настройки по управлению таймаутами RDP есть в секции GPO с настройками пользователя: User Configuration -> Administrative Templates -> Windows Components. С помощью политики из пользовательской секции вы сможете более гибко настроить группы пользователей с различными лимитами на длительность RDP сессий.

Параметры таймаутов для RDP сессий, которые задаются политиками можно также настроить напрямую через реестр. Указанным выше политикам соответствую следующие DWORD параметры в ветке реестра HKLMACHINESOFTWAREPoliciesMicrosoftWindows NTTerminal Services

  • MaxDisconnectionTime
  • MaxIdleTime
  • MaxConnectionTime
  • MaxDisconnectionTime
  • RemoteAppLogoffTimeLimit

Например, чтобы установить максимальную продолжительность для отключенной RDP сессии в 15 минут (90000 мс), нужно изменить параметр реестра с помощью такой команды PowerShell :

Set-ItemProperty "HKLM:SOFTWAREPoliciesMicrosoftWindows NTTerminal Services" -Name MaxDisconnectionTime -Type 'DWord' -Value 900000

Также вы можно можете задать ограничение времени RDP сессии на вкладе sessions в свойствах локального (консоль lusrmgr.msc) или доменного пользователя ( консоль dsa.msc — ADUC ). Здесь доступны следующие параметры:

  • End a disconnected session
  • Active session limit
  • Idle session limit
  • When a session limit is reached or connection is broken: Disconnect from session или End Session
  • Allow reconnection: From any Client или From originating client only

настройки макс. длительности сессий в свойствах пользователя

Не стоит делать таймауты на время RDP сеанса слишком маленькими, иначе сеансы пользователей будут завершаться при малейшей неактивности.

Если у вас развернут RD Gateway Server для доступа к RDS серверам, вы можете настроить отдельные таймауты для пользователей, подключенных через RDGW (откройте политику авторизации подключений и перейдите на вкладку Timeouts).

rd gateway настройка таймаутов для подключений пользователей

В Windows Server 2008 R2 также можно было задать лимиты RDP сессий на хосте через специальную консоль tsconfig. msc (RD Session Host Configuration). Достаточно было запустить консоль, щелкнуть правой кнопкой по RDP-Tcp -> Properties. Настройки ограничения длительности сессий находятся на вкладке Sessions . Но в следующих версиях Windows Server эта консоль отсутствует (хотя вы можете вручную скопировать файлы tsadmin.msc и tsconfig.msc и использовать эти консоли и более новых версиях Windows Server).

лимиты rdp в консоли tsconfig.msc

Сообщения о превышении длительности RDP сессий

После того, как вы настроили политики с таймаутами RDS, пользователи увидит такое сообщение, перед завершением своей сессии:

Idle timer expired_x000D_Session has been idle over its time limit._x000D_It will be disconnected in 2 minutes._x000D_Press any key to continue the session.

сообщение о простаивающей сесии в windows через 2 минуты

При этом в логах хоста появляется Event ID 26.

Подробнее о логах RDP подключений . [/aler]

событие простаивающей rdp сессии

Вы можете отключить это предупреждение, установив в классе WMI Win32_ TSSessionSettings значение EnableTimeoutWarning = 0 .

Set-WmiInstance -Path "\localhostrootCIMV2TerminalServices:Win32_TSSessionSetting.TerminalName='RDP-Tcp'" -Argument @{EnableTimeoutWarning=0}

Теперь, когда Windows будет автоматически завершать простаивающие RDP сеансы, пользователь получит от RDP клиента такое сообщение:

Your Remote Desktop Services session ended because the remote computer didn’t receive any input from you.

rds сессия завершена из-за неактивности пользователя

В некоторых случаях вы можете столкнуться с такой ошибкой в RDP клиенте:

Your Remote Desktop Services session has ended._x000D_Another user connected to the remote computer, so your connection was lost. Try connecting again, or contact your network administrator.

rds сессий завершена другим пользователем

Это означает, что кто-то другой вошел на компьютер через RDP (когда количество одновременных RDP сессий на компьютере ограничено параметром Limit number of connections , например, в десктопных версиях Windows доступен только один сеанс). Либо вы повторно вошли на удаленных RDP/RDS хост с нового компьютера.

Вы можете разрешить множественные подключения под одним пользователем к RDP хосту с помощью параметра GPO Restrict Remote Desktop Services users to a single Remote Desktop Services session = Disabled (в ветке разделе Computer Configuration -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Connections).

групповая политика - ограничить количесвто сессий для одного пользователя до одной

EnglishRussianUkrainian