Вопрос или проблема
Согласно документации Microsoft об автологине, кажется, что только один пользователь может быть настроен для автоматического входа при запуске How to turn on automatic logon in Windows
Поскольку запись в реестр производится в HKEY_LOCAL_MACHINE, а ключи названы DefaultUsername
и DefaultPassword
, кажется, что только один пользователь может быть настроен для автологина.
Я также заметил, что HKEY_CURRENT_USER имеет запись WinLogon, но не могу найти ключ, который позволял бы настроить автологин текущего пользователя.
Есть ли способ настроить автологин для двух пользователей, который я упускаю из виду?
Я использую Windows Server 2019.
Вы не можете настроить автоматический вход для двух пользователей одновременно с помощью этой функции. Причина в том, что функция автологина Windows входа осуществляет пользователя в консольную сессию, и только одна такая интерактивная сессия возможна на компьютере.
Если бы вы смогли настроить автологин для двух пользователей, одна из сессий была бы отключена и недоступна из консоли. Хотя, безусловно, бывают случаи, когда может быть полезен вход для нескольких неинтерактивных пользователей, но функция автологина не предназначена для этого.
Более того, эта функция автологина является единственным методом, который автоматически входит в полную пользовательскую сессию (с локального устройства). Существуют другие способы входа пользователя, например, выполнение задачи от имени конкретного пользователя, но ни один из них не создает полноценную сессионную сессию с рабочим столом.
Возможным обходным решением было бы автоматически инициировать подключение к удаленному рабочему столу с другого компьютера. Это успешно создаст полную сессионную сессию, которая будет работать вместе с встроенной функцией автологина.
Другой способ — использовать это ПО (не бесплатное): LogonExpert
Отказ от ответственности: я не имею никакого отношения к разработчикам или компании, которая разрабатывает это ПО.
На самом деле, есть один способ.
Основная идея заключается в том, чтобы запустить RDP-сессию для каждого пользователя, которого вы хотите автоматически входить; эти (локальные) RDP-сессии будут запускаться некоторыми запланированными задачами, по одной для каждого пользователя для автологина.
Каждая задача будет завершена через 1 минуту, а каждая следующая задача будет отложена на 2 минуты позже предыдущих, так что будет только одно активное RDP-подключение к серверу (в зависимости от лицензии, можно выполнить только 2 одновременных подключения к Windows Server).
ИЗМЕНЕНИЕ 2 марта 2025:
После нескольких месяцев экспериментов с 3 пользователями автологина на VPS Contabo, я обнаружил, что иногда некоторые пользователи не были автоматически вошли в систему. Я подозреваю, что вступило в силу ограничение на максимальное количество одновременно активных сессий RDP в 2. Я увеличил задержку до 5 минут, включая первого пользователя автологина, и теперь все работает хорошо.
Полные инструкции:
- Войдите в систему под дополнительным пользователем (НЕ одним из тех, кого нужно автоматически вводить), который будет использоваться как мастер автологина. Я выбрал для этого пользователя Администратора.
- Создайте файл подключения RDP для каждого пользователя, которого вы хотите добавить в автологин. Этот файл должен содержать встроенную информацию для входа (имя пользователя в открытом виде и зашифрованную форму пароля, которые будут храниться в файле RDP). Я создал скрипт Powershell, который создает такие файлы, следуя инструкциям в этот ответ: вы можете найти скрипт в разделе Бонусы ниже
- Протестируйте файл подключения RDP, дважды щелкнув по нему: он должен открыться без запроса чего-либо. В частности, в первый раз, когда вы выполняете такое подключение, сообщение подтверждения безопасности может спросить вас, хотите ли вы продолжить подключение к недоверенному компьютеру. Если такое сообщение появится, отметьте чекбокс
Больше не спрашивать для подключений к этому компьютеру
и нажмите кнопкуДа
- Запустите Планировщик задач и импортируйте задачу из раздела Бонусы ниже, затем настройте ее, следуя инструкциям. В качестве альтернативы, вы можете создать новую базовую задачу и:
- Установите имя задачи, описание и пользователя, который будет её выполнять; установите задачу на виконання независимо от того, вошел ли пользователь в систему:
- Установите триггер
При запуске
:
- Если это не первый пользователь, который будет автоматически введен, установите задержку. 2 минуты для второго пользователя, 4 минуты для третьего пользователя, 6 минут для четвертого и так далее
- Установите действие на выполнение
mstsc.exe
, установив аргумент как путь к файлу RDP с встроенной аутентификацией:
- Настройте условия, как показано ниже (в частности, снимите все галочки в разделе
Электропитание
:
- Установите задачу на завершение через 1 минуту (иначе подключение клиента RDP будет оставаться активным навсегда)
- Нажмите OK для сохранения задачи. Система запросит пароль пользователя, который будет выполнять задачу
- Установите имя задачи, описание и пользователя, который будет её выполнять; установите задачу на виконання независимо от того, вошел ли пользователь в систему:
- Повторите шаги 2-4 для каждого дополнительного пользователя, которого необходимо автоматически ввести в систему
Готово!
Это работает для меня на Windows Server 2022 Datacenter 21H2. Проверено в декабре 2024 года.
Импликации безопасности
Файлы RDP должны содержать зашифрованную форму пароля пользователя для автологина. Это шифрование обратимо, и пароль может быть извлечен. Это может быть неприемлемо в некоторых средах.
Пользователь, который будет запускать задачи, должен иметь доступ к файлам RDP и, следовательно, сможет извлечь пароли пользователей, автоматически входящих в систему. Это включает любое вредоносное ПО, которое такой пользователь может запускать
Файлы RDP сохраняются на диске, и поэтому любой, кто имеет доступ к диску, может извлечь пароли пользователей, автоматически входящих в систему.
Задача должна иметь опцию Не сохранять пароль. Задача будет иметь доступ только к локальным ресурсам компьютера
отключенной, потому что нам нужно использовать сетевое подключение для подключения через RDP, даже если оно подключается локально. Это запросит пароль пользователя, который будет выполнять задачу, и этот пароль будет храниться Windows с обратимым шифрованием на диске (предполагаю, используя некоторые LSAsecret)
Это заставило меня выбрать пользователя Администратора для выполнения задач автологина, потому что:
- Это арендованный сервер, поэтому я уже должен доверять компании-арендодателю не воровать или не шпионить за моими файлами
- Пользователи уже доверяют Администратору, поэтому они делятся с ним своими паролями
- Если пользователь Администратор скомпрометирован, вся машина скомпрометирована, так что мы уже потеряли
Бонус файлы
Скрипт PowerShell для создания файлов RDP с встроенной аутентификацией.
Инструкции:
- Создайте новый текстовый файл и вставьте в него следующий текст. Это НЕОБХОДИМО сохранить на той же машине, где будет использоваться файл RDP, так как пароль будет зашифрован с использованием ключа, уникального для каждой машины.
- Измените расширение на .ps1
- Щелкните правой кнопкой мыши по скрипту и выберите “Запуск с PowerShell” под учетной записью администратора
- Откроется окно консоли с запросом изменить политику исполнения. Нажмите Y и Enter
- Введите необходимую информацию в окнах ввода, открываемых скриптом
- Выберите целевую папку и подтвердите
- Готово! У вас будет ваш файл user.rdp с настройками по умолчанию. Дважды щелкните на нем, чтобы открыть локальное подключение к RDP прямо сейчас и протестировать файл
- Вы можете выбрать уже созданный файл .rdp: скрипт изменит только информацию о пользователе и зашифрованном пароле в нем, сохраняя все остальные данные нетронутыми.
- Помните: созданный файл RDP будет содержать действительный зашифрованный пароль только для той же машины, на которой он был создан. Он не может быть передан на другие машины, или клиент RDP запросит пароль
Вот содержимое скрипта:
################################################################################
# IMPORT ASSEMBLY
################################################################################
# Для Microsoft.VisualBasic.Interaction.InputBox
Add-Type -AssemblyName Microsoft.VisualBasic
# For System.Windows.Forms.SaveFileDialog
Add-Type -AssemblyName System.Windows.Forms
################################################################################
# CONSTANTS
################################################################################
# Имя приложения для заголовков окна
$APPTITLE = 'Создатель файла RDP'
# Стандартное содержимое файла RDP
$DEFAULT_RDP_FILE_CONTENT = @'
screen mode id:i:2
use multimon:i:0
desktopwidth:i:1920
desktopheight:i:1080
session bpp:i:32
winposstr:s:0,3,0,0,800,600
compression:i:1
keyboardhook:i:2
audiocapturemode:i:0
videoplaybackmode:i:1
connection type:i:7
networkautodetect:i:0
bandwidthautodetect:i:1
displayconnectionbar:i:1
enableworkspacereconnect:i:0
disable wallpaper:i:1
allow font smoothing:i:0
allow desktop composition:i:0
disable full window drag:i:1
disable menu anims:i:1
disable themes:i:1
disable cursor setting:i:0
bitmapcachepersistenable:i:1
full address:s:localhost
audiomode:i:0
redirectprinters:i:0
redirectcomports:i:0
redirectsmartcards:i:0
redirectwebauthn:i:1
redirectclipboard:i:0
redirectposdevices:i:0
autoreconnection enabled:i:0
authentication level:i:2
prompt for credentials:i:0
negotiate security layer:i:1
remoteapplicationmode:i:0
alternate shell:s:
shell working directory:s:
gatewayhostname:s:
gatewayusagemethod:i:4
gatewaycredentialssource:i:4
gatewayprofileusagemethod:i:0
promptcredentialonce:i:0
gatewaybrokeringtype:i:0
use redirection server name:i:0
rdgiskdcproxy:i:0
kdcproxyname:s:
enablerdsaadauth:i:0
drivestoredirect:s:
'@
################################################################################
# MAIN
################################################################################
# Запрос имени пользователя и пароля для сохранения в файле RDP
$msg = 'Введите имя пользователя:'
$username = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $APPTITLE)
$msg = 'Введите пароль:'
$raw_pw = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $APPTITLE)
# Шифрование пароля
$enc_pw = ($raw_pw | ConvertTo-SecureString -AsPlainText -Force) | ConvertFrom-SecureString;
# Запрос файла для вывода
# Если файл уже существует, он будет модифицирован с необходимым содержанием
$saveFileDialog = [System.Windows.Forms.SaveFileDialog]@{
OverwritePrompt = $true
InitialDirectory = [Environment]::GetFolderPath('MyDocuments')
FileName = $username
Title="Выберите выходной файл. Можно выбрать существующий, чтобы обновить его"
Filter = "Файлы подключения к удаленному рабочему столу (.rdp)|*.rdp"
}
# Показать диалог выбора файла для сохранения
if($saveFileDialog.ShowDialog() -ne 'Ok') {
Exit
}
# Если файл уже существует, получить текущее содержимое файла
$clean_rdp_file_content = $DEFAULT_RDP_FILE_CONTENT
if(Test-Path $saveFileDialog.FileName) {
$clean_rdp_file_content = Get-Content $saveFileDialog.FileName | Where { $_ -notmatch "^(username:s:|password 51:b:)" }
}
# Создать файл RDP
Out-File -FilePath $saveFileDialog.FileName -InputObject $clean_rdp_file_content -Encoding utf8
Out-File -FilePath $saveFileDialog.FileName -InputObject "username:s:$($username)" -Encoding utf8 -Append
Out-File -FilePath $saveFileDialog.FileName -InputObject "password 51:b:$($enc_pw)" -Encoding utf8 -Append
Почти-готовый файл задачи Планировщика задач, который можно импортировать в Планировщик задач
Инструкции:
- Создайте новый текстовый файл и вставьте в него следующий текст
- Переименуйте файл в autologon-user.xml
- Запустите Планировщик задач
- Нажмите меню
Действие \ Импортировать задачу...
- Выберите файл autologon-user.xml. Откроется окно Свойств задачи.
- На вкладке Общие, настройте имя задачи и описание, и укажите пользователя, который будет выполнять задачу
- На вкладке Действия, отредактируйте действие, указав путь к файлу user.rdp
- Если это не первый пользователь, который будет входить в систему, перейдите на вкладку Триггеры и отредактируйте триггер, указав поле
Задержать задачу на:
. Введите2 минуты
для второго пользователя,4 минуты
для третьего пользователя,6 минут
для четвертого и так далее.
Вот содержимое файла:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2024-12-22T10:00:00.0000000</Date>
<Author>Administrator</Author>
<Description>Automatically logs in user</Description>
<URI>\user autologon task</URI>
</RegistrationInfo>
<Triggers>
<BootTrigger>
<Enabled>true</Enabled>
</BootTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-21-123456789-9876543210-1122334455-500</UserId>
<LogonType>Password</LogonType>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT1M</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
mstsc.exe
<Arguments>C:\Users\Administrator\Desktop\user.rdp</Arguments>
</Exec>
</Actions>
</Task>
.
Ответ или решение
Вопрос, касающийся возможности автоматической авторизации двух пользователей в системе Windows, в частности на серверной версии Windows Server 2019, имеет сложное решение из-за ряда ограничений, накладываемых базовыми принципами работы операционной системы. Согласно документации Microsoft, возможность настраивать автоавторизацию предоставляется только для одного пользователя через настройки в реестре HKEY_LOCAL_MACHINE, где хранятся ключи DefaultUsername
и DefaultPassword
. В то время как реестр HKEY_CURRENT_USER имеет раздел WinLogon, отсутствуют ключи, которые позволяли бы настроить автоавторизацию для текущего пользователя.
Теория: Автоматическая авторизация подразумевает вход в систему без необходимости ручного ввода учетных данных. Эта функция преимущественно используется в ситуациях, где требуется упрощение процедур запуска сервера или компьютера, например, в рамках контролируемой корпоративной сети, где безопасность управляется другими средствами. Windows по своей природе позволяет только одну интерактивную сессию на консоль, поэтому автоавторизация логично работает только для одного пользователя.
Пример: Функциональность автоавторизации реализуется чаще всего через изменение реестра с указанием конкретного пользователя, что исключает возможность одновременной авторизации сразу нескольких пользователей. Однако, есть альтернативные пути для обхода данного ограничения. Один из таких способов — использование удаленных сессий через RDP (Remote Desktop Protocol), которые позволяют создавать отдельные рабочие сессии для каждого пользователя. Это достигается посредством настройки задач в планировщике для автоматического запуска RDP сессии для каждого из пользователей с указанными временными задержками, чтобы избежать лимита на количество одновременных подключений к Windows Server.
Применение: Для реализации автоматической авторизации более чем одного пользователя, рекомендуется следовать нижеследующим шагам:
-
Мастер-пользователь: Авторизуйтесь в системе с дополнительным пользователем, который не будет участником автоматической авторизации, например, администратором. Этот пользователь служит в качестве мастера-авторизации.
-
Создание RDP-файлов: Создайте RDP-файл для каждого пользователя, которому необходимо обеспечить автоавторизацию. Эти файлы должны содержать зашифрованные учетные данные для подключения без необходимости ручного ввода.
-
Проверка RDP-файлов: Протестируйте RDP-файлы, чтобы убедиться в том, что они позволяют подключение без запроса пароля. При необходимости установите необходимые доверенные подключения.
-
Настройка планировщика задач: Создайте задачи в планировщике для каждого RDP-файла. Задачи должны запускаться при старте системы и иметь задержку для каждого последующего пользователя, чтобы избежать проблем с количеством подключений.
-
Настройка безопасности: Учтите, что в RDP-файлах содержатся зашифрованные пароли, которые потенциально могут быть доступны злоумышленникам. Обеспечьте защиту этих данных, ограничивая доступ к файлам и серверу в целом.
-
Мониторинг и тестирование: После настройки задач проведите тестирование, чтобы подтвердить работоспособность механизма для всех пользователей. В случае возникновения сбоев, возможно увеличить временной интервал для запуска последующих задач.
Реализация данного подхода позволит протестировать и развернуть функциональность автоматической авторизации для нескольких пользователей, оптимизировав работу сервера в рамках корпоративных задач. Однако, следует учитывать все аспекты безопасности и производительности системы, чтобы не подвергать опасности сетевую инфраструктуру.