OpenVPN подканя за потребителско име и парола на управляващия терминал, а файл, пренасочен към стандартния вход, не е този терминал. Тази една подробност обяснява скрипта, който виси, докато паролата стои точно там в тръбата. Подканата се изчертава от клиента, а четенето се взема от терминалното устройство, така че пренасочването на stdin не променя нищо. Подайте клиента през един от документираните му входове и същият скрипт ще се свърже от първия опит.

Три входа покриват почти всеки случай и всеки се проваля по свой начин. Избирайте по подканата, която клиентът наистина показва, а не по опцията, която е най-лесна за скриптиране.

Подканата не идва от stdin

Когато OpenVPN се нуждае от идентификационни данни, той отваря управляващия терминал и чете оттам. Затова интерактивният тест изглежда добре, а същата команда под cron или unit файл стои в покой с подкана, записана в журнал, който никой не гледа. Някои сборки се връщат към стандартния вход, когато няма терминал, и тази непоследователност е по-лоша от твърд отказ, защото скрива проблема до внедряването.

Проверете средата, преди да пишете какъвто и да е код: стартирайте клиента под същия потребител, със същия stdin, както ще го направи планировчикът или мениджърът на услуги. Ако подканата никога не се появи в журнала и процесът не напредва, нещо чака терминал, който не съществува.

Вход първи: файл с идентификационни данни от два реда

Опцията за удостоверяване приема път, а файлът съдържа точно два реда, потребителско име и след това парола, без нищо друго. Подавайте пътя изрично, вместо да разчитате на име по подразбиране, защото отклонен файл с данни в работната директория е начинът грешният акаунт да влезе в употреба. Задайте режим 0600 и дайте собственост на акаунта, който стартира клиента.

Клиентът чете този файл веднъж при стартиране, така че смяната на паролата означава рестартиране на процеса. Обикновено това е поведението, което искате, и то принадлежи в runbook до процедурата за смяна.

Вход втори: askpass за паролата на ключа

Защитен с парола частен ключ повдига втора, различна подкана и има своя отговор от файл: опцията askpass чете паролата от първия ред на файл. За тунели на базата на SSH еквивалентът е програма askpass, която клиентът изпълнява, и чийто стандартен изход става тайната.

Нито една от двете форми не слага тайната в списъка с аргументи и двете я оставят да съществува като файл или като изпълним файл, който я отпечатва. Защитата са правата на файла и собствеността на процеса, не незнанието. Помощник, който извежда твърдо зададен низ, е тайна с допълнителни стъпки.

Вход трети: собственият CLI на порталния клиент

Корпоративните клиенти обикновено предоставят входна точка от командния ред, която се свързва с именуван портал без участие на прозорец, и това е поддържаният път. В Linux клиентът GlobalProtect предлага операции за свързване и импортиране на сертификат през своя CLI, а порталите със сертификатно удостоверяване се нуждаят от стъпката за импортиране, преди автоматизирано свързване да проработи. Предпочитайте го пред синтезирани натискания на клавиши: получавате истински статус при изход, без зависимост от фокуса на прозореца, и той оцелява при заключен екран.

Ако първото свързване все още изисква човек да приеме сертификат, автоматизацията не е завършена. Направете импортирането по време на настройката и го запишете като предварително условие.

Когато потокът се нуждае от псевдотерминал

Последователност, която иска парола и след това еднократен код, няма един файл за четене. Терминален драйвер като Expect е правилният инструмент, защото чака всеки шаблон поред, и се нуждае от стартиран процес, преди да може да съпостави каквото и да е.

Два отказа доминират. Скрипт, който чака подкана, без да стартира клиента, чака вечно, а Tcl не е обвивка, така че shell аритметика, написана вътре в expect блок, не се изчислява както се чете. Дръжте флага за отстраняване включен, докато изграждате шаблоните, после го изключете.

Тайни, които изтичат, и къде се крият

Всичко, подадено като аргумент, е видимо в списъка с процеси, затова идентификационните данни принадлежат във файл или зад помощник, никога на командния ред. Еднократните кодове се изразходват по замисъл и трябва да бъдат създавани за всеки опит. Журналите при отказ често носят потребителското име, а понякога и повече, затова редактирайте ги, преди да ги изпращате някъде, и дръжте тайната извън самия профил, защото конфигурационен файл с вградена парола се поставя в тикети и хранилища. Тогава смяната на акаунта означава лов на всяко копие, което е точно цената, която тази подредба избягва.

Одитирайте избраните входове, после ги свържете към unit файла или планировчика, който наистина ще стартира клиента. Тунелът живее точно толкова, колкото живее този процес.

Подобни статии