Каждый рецепт автоматического переподключения рано или поздно упирается в один и тот же вопрос: где живёт пароль. Популярный ответ — само действие задания, и это худшее место для него. Существуют две другие схемы. Какая подходит, зависит от того, может ли машина аутентифицироваться без человека и принимает ли сервер сертификаты.

Что действие задания оставляет читаемым

Аргументы в запланированном задании — часть его определения, а не скрытое значение времени выполнения. Любой, кто может прочитать задание, восстановить его резервную копию или экспортировать его XML, видит строку именно так, как вы её ввели. Во время запуска та же строка появляется в списке процессов. Агент мониторинга может скопировать её в журнал, который вы никогда не просматриваете.

schtasks /query /tn "VPN Reconnect" /xml
cmdkey /list

Проверьте, прежде чем предполагать обратное. Первая команда печатает полное определение, включая действие и его аргументы. Вторая показывает, какие учётные данные текущая учетная запись сохранила в кэше, что важно для альтернативных схем ниже. Если пароль появляется в XML задания, его смена — лишь половина исправления, потому что задание всё ещё хранит старое значение.

Что на самом деле даёт сохранённый предварительно общий ключ

Add-VpnConnection -L2tpPsk записывает ключ в запись телефонной книги подключения, а не в задание. Это меньшая поверхность раскрытия, чем действие задания. Это всё ещё восстановимый секрет, потому что администратор на машине может прочитать телефонную книгу.

Для лабораторной связи между двумя машинами, которыми вы управляете, такой обмен может быть приемлемым. Для учётных данных пользователя на общем узле — нет. Называть это зашифрованным хранилищем не меняет того, кто может его прочитать. Телефонная книга — это файл конфигурации. Планируйте для человека, который может её открыть, а не только для того, кто может войти как пользователь.

Учётные данные Winlogon убирают секрет и добавляют зависимость

-UseWinlogonCredential выбирает другой путь. Подключение аутентифицируется с MSCHAPv2 по учётным данным вошедшего пользователя. Для этой учётной записи ничего дополнительно не сохраняется.

Добавляемая зависимость значительна. Нужен интерактивный вход, из которого можно занять, а это исключает служебную учётную запись и задание до входа. Подключение также наследует всё, до чего учётные данные этого пользователя могут добраться на сервере. Читайте переключатель как утверждение о том, откуда берутся учётные данные, а не как настройку безопасности. Он меняет источник и ничего в том, как сервер потом авторизует сеанс.

Аутентификация по сертификату масштабируется, потому что ничего не хранится

Там, где сервер поддерживает EAP-TLS, сертификат машины полностью убирает общий секрет, а отзыв происходит на уровне сертификата. Задание, работающее как SYSTEM, может предъявить этот сертификат без интерактивного входа. Подтвердите, что сервер принимает аутентификацию по сертификату, прежде чем строить на ней. Схема, зависящая от неподдерживаемого метода, — это план, а не решение. Затем решите, где живёт закрытый ключ: хранилище машины для идентичности устройства, хранилище пользователя для человека.

Там, где имени пользователя и пароля не избежать, храните их в Credential Manager с областью действия на собственную учётную запись задания. Пусть клиент читает их оттуда, а не из аргумента. Секрет, который задание может получить, не печатая его, — меньшая проблема, чем записанный в его определении.

Проверьте артефакты перед следующей ротацией

Смотрите на то, что хранится, а не на то, что вы задумали. Проверьте телефонную книгу по каждому пользователю, копию для всех пользователей, XML задания и любой скрипт, вызывающий команду набора. Затем подтвердите, что сертификат или кэшированные учётные данные ограничены учётной записью, которую использует задание, потому что учётные данные, сохранённые для вашей интерактивной учётной записи, невидимы для SYSTEM.

Запишите метод аутентификации и учётную запись в примечаниях самого задания. Следующему человеку, который изменит политику сервера, нужно знать, какая схема используется. Этот ответ не виден только из поведения при переподключении. Напишите его там, куда следующая ротация посмотрит в первую очередь.

Похожие статьи