Когда пользователь со своего компьютера закрывает окно своей RDP/RDS сессии в терминальном клиенте (mstsc.exe, RDCMan или RDP HTML WEB клиенте) простым нажатием по крестику в окне, без выполнения выхода (logoff), его сессия переходит из активного режима в режим disconnected (разъединённый сеанс). В этом режиме все запущенные пользователем программы, открытые документы и окна продолжают работать на удаленном сервере и потреблять ресурсы.
По-умолчанию RDP сессия пользователя в Windows может находится в состоянии disconnected до перезагрузки компьютера или явного ее завершения пользователем или администратором. Это довольно удобно, т.к. пользователь может в любой момент подключиться к своей старой сессии и продолжить работу с запущенными программами и открытыми документами.
На следующем скриншоте видно, что отключенные сессии пользователей на RDS сервере с Windows Server 2019 потребляют около 35% памяти сервера.
Кроме того незавершенные сессии могут блокировать открытые файлы на файловых серверах, вызывать проблемы с корректным сохранением данных в приложениях, профилях или User Profile Disks. Кроме наличие старых RDP сессий часто вызывает проблему блокировки учетной записи пользователей в домене после смены пароля (когда RDS сессии продолжает работать под старыми паролем пользователя).
С помощью команды
quser
можно узнать, когда начата 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 коллекции.
В 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 сеансы пользователей через 8 часов, включите политику “Set time limit for disconnected session” = Enabled, и в выпадающем списке выберите 8 часов.
Сохраните изменения и обновите настройки групповых политик в Windows (gpupdate /force). Новые настройки таймаутов будут применяться только к новым RDP сеансам, текущие сеансы придется завершить вручную.
Настройки GPO имеют более высокий приоритет, чем настройки таймаутов в коллекции RDS.
Параметры таймаутов для RDP сессий, которые задаются политиками можно также настроить напрямую через реестр. Указанным выше политикам соответствую следующие DWORD параметры в ветке реестра HKLMACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services
- MaxDisconnectionTime
- MaxIdleTime
- MaxConnectionTime
- MaxDisconnectionTime
- RemoteAppLogoffTimeLimit
Например, чтобы установить максимальную продолжительность для отключенной RDP сессии в 15 минут (90000 мс), нужно изменить параметр реестра с помощью такой команды PowerShell:
Set-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal 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
Если у вас развернут RD Gateway Server для доступа к RDS серверам, вы можете настроить отдельные таймауты для пользователей, подключенных через RDGW (откройте политику авторизации подключений и перейдите на вкладку Timeouts).
В Windows Server 2008 R2 также можно было задать лимиты RDP сессий на хосте через специальную консоль tsconfig.msc (RD Session Host Configuration). Достаточно было запустить консоль, щелкнуть правой кнопкой по RDP-Tcp -> Properties. Настройки ограничения длительности сессий находятся на вкладке Sessions. Но в следующих версиях Windows Server эта консоль отсутствует (хотя вы можете вручную скопировать файлы tsadmin.msc и tsconfig.msc и использовать эти консоли и более новых версиях Windows Server).
Сообщения о превышении длительности RDP сессий
После того, как вы настроили политики с таймаутами RDS, пользователи увидит такое сообщение, перед завершением своей сессии:
Idle timer expired Session has been idle over its time limit. It will be disconnected in 2 minutes. Press any key to continue the session.
При этом в логах хоста появляется Event ID 26.
Подробнее о логах RDP подключений. [/aler]Вы можете отключить это предупреждение, установив в классе WMI Win32_TSSessionSettings значение EnableTimeoutWarning = 0.
Set-WmiInstance -Path "\\localhost\root\CIMV2\TerminalServices: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.
В некоторых случаях вы можете столкнуться с такой ошибкой в RDP клиенте:
Your Remote Desktop Services session has ended. Another user connected to the remote computer, so your connection was lost. Try connecting again, or contact your network administrator.
Это означает, что кто-то другой вошел на компьютер через 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).
Спасибо. По RDG почему-то такое не проходит… У нас болтаются сессии и по 5 часов и по 10… Хотя лимит времени простоя 2 часа.
Настройки лимитов сессий на RDSH хостах применили? Или только на RDGW?
А как применить эти политики не глобально, а только на пользователей? Или они на админов не действуют или на все же на всех?
И кстати в настройках каждого пользователя есть вкладка сеансы где настраиваются эти вещи, она не работает, эта настройка завязана на эти политики? Если их включить, но в сеансе пользователя не указывать отключения то не будет отключать?
Наверно проще всего задать параметры таймаутов через RDS коллекцию .
Подскажите через какую команду и каким параметром можно задать «завершение отключенного сеанса» конкретному пользователю, не всем. Не через GUI.
Это настройки/политики уровня компьютера, не пользователя.
Насколько я помню по последнему скриншоту с tsconfig.msc в Windows Server 2008R2, можно было создать отдельное RDP-TCP соединение с другими настройками. Права на соединения раздать на вкладке Security.
Но это только идея, сам не делал.
Спасибо за статью!
Подскажите пожалуйста, вопрос по RDP. У меня Windows Server 2019 и я совсем не могу понять, как настроить чтобы можно было подключать больше чем 2 юзеров по rdp. У Вас на эту тему статью не нашел, хотя кажется тема востребована.
Буду очень признателен за ответ ::)
Нужно ставить роль RDS (Remote Desktop Services Host) и покупать лиценизии (RDS CAL) — https://winitpro.ru/index.php/2017/11/21/ustanovka-i-aktivaciya-rds-license-na-windows-server-2016/
Your Remote Desktop Services Session ended because the remote computer didn’t receive any input from you.
Эта ошибка появляется из-за того, что на RDP сервере настроены лимиты?
Очень похоже на это.
Такая себе статья. Автор как будто заметку для себя составил
Ты хотел чтоб после статьи ты понял смысл бытия?! Вопрос из заголовка раскрыт, что тебе еще надо?
Всё же есть вопрос, по политикам этим. Точно такая же беда,как и у первого коллеги. Политики разливаются на 2 группы юзеров, на одну с таймаутом в 1 час, на другую в 3 часа. Но сессии могу висеть и дольше. Подскажите, есть ли какие-то стандартные проблемы с политикой на юзеров?
Заранее благодарю!
Политики нацеливаете через GPO на контейнер с серверами?
Что в результирующе политике пользователя?
Включили режим loopback processing mode? (https://winitpro.ru/index.php/2019/03/18/primenenie-gpo-spravka-admina/)
нацелена на ou с юзерами, но через WMI фильтр применяется к нужным сервакам. RSOP показывает, что применяются политики нужные.
Подскажите пожалуйста, а есть настройки выхода пользователя, но не по лимиту времени, а строго в определенное время? К примеру logoff в 21-00? (Когда-то делал это через планировщик заданий).
В GPO такого нет. Делайте командой
logoff
илиshutdown -L
в планировщике.как отключить лимит таймаута если везде в настройках как выше в статье все не задано,а все равно если не пользуешься пишет таймер простоя истек
На RDS фермах настройки таймаутов RDP еще задаются через коллекции. Или в настройках пользователеля в AD (есть отдельная вкладка Sessions) Также возможно эти настройки внести напрямую в реестр.
В общем нужно больше информации о конфигурации и версии Windows
Завершить завершить все RDP сессии на windows server со статусом disconnect.
@ECHO OFF
FOR /F "USEBACKQ TOKENS=2 DELIMS= " %%a IN (`quser^|findstr /b /v "^>"^|findstr /i /v " ID "^|findstr /v /i "rdp-tcp"`) DO logoff %%~a
EXIT 0
И запускать планировщиком при отключении сеанса (есть такой триггер)
15 минут, наверное, 900_000мс, а не 90_000мс?
Всем привет. Помогите, пожалуйста, найти причину выбрасывания пользователя из сеанса. У меня таймауты настроены только в коллекции приложений. В настройках политики авторизации на сервере шлюза все галки сняты. Пользователи, подключающиеся через брокер напрямую нормально работают, таймауты отключений заданные в коллекции отрабатывают корректно. Однако если пользователь подключается через шлюз, то его выбрасывает раз в час. Как можно диагностировать данное поведение?
У RDGW есть свои таймауты. Откройте свойства CAP и перейдите на вкладку Timeouts.
Там есть два параметра:
Enable idle timeout
Enable session timeout
я знаю про эти параметры, у меня они выключены..пробовал включать и задавать какие-то значения, но всё равно выбрасывает.. интересно то, что в журналах шлюза только лишь упоминания, что пользователь завершил работу, продолжительность сессии 3600с либо близкие к этому значения.. как будто где-то стоит ограничение сессии на 1 час..
Остаётся вопрос: настроил груповую политику и система рубит не только юзеров, но и админа, что не гут, не смотря на то, что в персональных настройках профиля, у админа — Никогда, у юзера — 3 часа…
Отключил для группы (не применимо), теперь и персональные настройки юзера не отрабатывают. Отключенные сессии висят беспонечно.
Как вариант — создать две GPO для хоста. Одна GPO для вашей группы администраторов (через Security filtering), вторая — для всех. Настроить в двух GPO разные таймауты отключения в User Configuration\Policies\Administrative Templates\Windows Components\Remote Desktop Services\Remote Desktop Session Host\Session Time Limits.
Сделать более высокий приортите для политики для админов, чтобы она применялась последней.
Спасибо за комментарий. К сожалению сервер работает в локальном режиме (без контроллера домена), соответственно, полагаю, создать групповую политику не представляется возможным.
Используйте множественные локальные политики (MLGPO), они как раз для сценария раздельных настроек для админов и пользователей для отдельностоящих компьютеров:
https://winitpro.ru/index.php/2020/11/25/nastroyka-neskolkih-lokalnyh-gpo-mlgpo/
Добрый день. Подскажите пожалуйста, такая проблема. Пользователь подключается к рабочему компу по средствам OpenVPN и потом до своего компа по RDP. Когда отключается от рабочего компа, если зайти сразу то сеанс возобновляется. Если постоит какое-то время, то сеанс завершается и когда приходит на работу, рабочий стол с нуля, как после перезагрузки. В АД смотрел во вкладке сеансы все по дефолту, никаких лимитов не выставлено. Проблема только с этим компов, никто более не жаловался. Не знаю зависит или нет, но подключается с компа на котором windows 11, но как мне кажется это никакого значения иметь не должно.
Проверяйте результирующие политики на этом компе, возможно там настроены параметры, которые задают длительность сеанса ( см. политики в статье). Также этим политикам соответсвуют параметры реестра, возможно из задали вручную. Нужно найти параметры и проверить значения.
Ну и смотрите логи RDP подключений — может там что увидите (https://winitpro.ru/index.php/2018/09/25/analizing-rdp-logs-windows-terminal-rds/)
Здравствуйте. Подскажите пожалуйста, как сделать список подключений по удаленке больше чем на 11? Спасибо
нашел ответ на свой вопрос. Вот, кому интерессно
https://www.howtogeek.com/267705/how-to-increase-the-number-of-jump-list-items-in-windows-10/
Добрый день! Несколько дней уже курю данный вопрос: windows server 2016 Terminal server Workgroup (без домена) на 25 юзеров, необходимо настроить авто-logout активным сессиям при простое, но каждому юзеру необходимо задать разные продолжительности просто, кому-то 15 мин, кому-то 40 мин, а кого-то что бы не выкидывало при любом простое (админы и некоторые юзеры). У вас вроде был ответ вскользь, хочу уточнить, имеется ли личный опыт удачной настройки данного случая? спасибо!
Я сам такой сценарий не реализовывал, но думаю вам должны помочь множественные локальные GPO.
Т.е. к разным группам пользователей вы можете привязать отдельные политики с разными настройками авто-логаута. https://winitpro.ru/index.php/2020/11/25/nastroyka-neskolkih-lokalnyh-gpo-mlgpo/
Раз машина не доменная, то пользователи у Вас локально прописаны на самом сервере. Вот там и назначайте таймауты. Каждому свои.
Кратко и исчерпывающе. Спасибо.
Не подскажите как сделать так что б завершать сеанс только некоторым пользователям а не всем
Назначьте разные политики для разных групп пользователей. Можно использовать множественные локальные GPO
https://winitpro.ru/index.php/2020/11/25/nastroyka-neskolkih-lokalnyh-gpo-mlgpo/
Мне бы для домена, есть терминальный сервер и я хотел бы для него накатывать политику по завершению сеанса, но когда делаю политику я ее накатываю на сервер и получается какая-нибудь группа пользователей в фильтре безопасности, сеанс завершается у всех, а не только в определенной группе , даже когда я в делегировании выбираю группу и говорю не применять политику она все равно применяется
Перепробовал все что мог но так у меня и не заработало, может у Вас в практиках все же есть какое-то рабочее решение
Вот такой вариант у меня заработал:
https://blog.it-kb.ru/2019/06/25/ps-script-with-get-rdusersession-workaround-for-disconnect-idle-sessions-on-rds-servers-depending-on-the-day-of-the-month-and-domain-group-membership/