vpncli -s против GUI: вход в Cisco Secure Client
vpncli -s читает подготовленный файл ответов, а GUI читает человека. Сравните, когда скрипт оправдан, что нужно файлу и как это доказать.
Cisco Secure Client даёт два способа ответить на одни и те же запросы входа: человек печатает в vpnui.exe или скрипт подаёт ответы в vpncli.exe через стандартный ввод с -s. Второй позволяет выполнять подключения по расписанию, не считывая экран GUI, и превращает вход в файл, который нужно защищать как учётные данные. Что выбрать, зависит от того, есть ли у машины человек и как часто меняется пароль. Ни один вариант не меняет того, что запрашивает шлюз, — только то, кто отвечает.
Оба пути заканчиваются в одном туннеле, поэтому сравнение касается эксплуатации, а не протокола.
Два способа ответить на одни и те же запросы
Путь через GUI интерактивен по замыслу: клиент спрашивает, кто-то отвечает, и сеанс живёт, пока этот человек его не трогает. Это правильный выбор на ноутбуке, которым пользуется человек, потому что запросы подстраиваются под метод аутентификации шлюза и никому не нужно держать пароль открытым текстом на диске.
Путь через скрипт подходит для киоска, лабораторной машины или задачи по расписанию, где некому печатать. Обмен явный: вы принимаете файл с учётными данными на диске в обмен на подключение без присмотра. Если шлюз предлагает аутентификацию по сертификату или SAML, такой обмен обычно не стоит того, потому что файл существует только ради ответов на запросы, которых избежал бы более надёжный метод.
Не смешивайте оба на одной машине одновременно. Командная строка и графический клиент борются за одно и то же состояние сеанса, и это проблема следующего раздела.
Что должен содержать файл ответов
Клиент спрашивает по порядку — шлюз, иногда выбор группы, имя пользователя, пароль и любое подтверждение баннера. Файл, который отвечает на всё это, выглядит так, с подставленными настоящими значениями:
connect vpn.example.com
MyGroup
alice
correct-horse-battery
yНадёжный способ собрать такой файл — один раз подключиться вручную, записать каждую введённую строку и каждое нажатие Enter, а затем точно воспроизвести эту последовательность. Развёртывания, которые хранят группу и имя пользователя в профиле, могут нуждаться в пустых строках там, где эти запросы больше не появляются, а последней строке всё равно нужен собственный перевод строки. Файл, в котором не хватает одной строки, обычно зависает на последнем запросе вместо отказа с понятной ошибкой, и поэтому винят сеть. Сверьте файл со своей записью дважды: один раз на порядок и один раз на пустые строки.
Держите файл вне любой синхронизируемой папки и доступным только той учётной записи, которая выполняет задачу. Этот пароль — открытый текст, поэтому файл является учётными данными: никакого репозитория, никакого общего диска, никакого вложения в заявке. Клиент ни о чём из этого не предупредит.
Почему GUI должен уйти первым
Начните скрипт с завершения процесса GUI, затем запустите CLI из его собственного каталога установки, потому что важны и рабочий каталог, и сборка клиента. Иллюстративная обёртка:
@echo off
taskkill /IM vpnui.exe /F >nul 2>&1
cd /d "%PROGRAMFILES(x86)%\Cisco\Cisco Secure Client"
vpncli.exe -s < C:\secure\login.txtКоды выхода здесь не являются надёжным признаком успеха. Клиент печатает ход работы и держит туннель в отдельном процессе, поэтому найдите в выводе строку состояния подключения и только потом начинайте работу, зависящую от VPN.
Если пропустить завершение GUI, скрипт может выглядеть работающим, тогда как существующий сеанс остаётся в том состоянии, в каком его оставил пользователь. Эта неисправность выглядит плавающей, и именно такая ошибка переживает неделю догадок.
Подтвердите сеанс, не предполагайте его
После возврата скрипта проверьте то, что существует только внутри туннеля — внутренний хост или суффикс DNS, на который отвечает лишь корпоративный резолвер. Прочитайте также строку состояния подключения в выводе клиента и всё остальное считайте отказом, а не медленным успехом. Повторный запуск файла при уже поднятом сеансе может оставить клиент наполовину настроенным, поэтому либо сначала отключитесь, либо пропустите вход, когда сеанс есть.
Затем решите, кто отвечает за переподключение. Цикл, который пингует внутренний адрес и снова запускает вход, может держать киоск онлайн месяцами, а также может заблокировать учётную запись при первой смене пароля. Ограничьте число попыток, подайте сигнал при превышении и позвольте команде идентификации сменить файл вместо того, чтобы устаревший пароль повторял попытки до блокировки.
Старый vpnclient.exe — не тот же инструмент
Та же автоматизация встречается под более старым именем, и эти два не взаимозаменяемы. Выведенный из эксплуатации клиент Cisco IPsec использовал vpnclient.exe с аргументами в строке, такими как глагол connect, имя профиля, пользователь и пароль в одной командной строке; а vpncli.exe ожидает последовательность запросов на стандартном вводе с -s. Поэтому копирование старого скрипта с форума на современную машину даёт команду, которая запускается, ничего видимого не делает, и виноватым остаётся шлюз.
Прежде чем править любые аргументы, проверьте, какой клиент установлен и какой скрипт на самом деле вызывает. Разница в имени достаточно мала, чтобы её пропустить в задаче по расписанию, и это первое, что нужно проверить, когда унаследованный скрипт перестал работать после обновления.