OpenVPN чита лозинку са терминала, а не са stdin
Где OpenVPN заиста чита лозинку, зашто датотека на stdin не успева и три подржана начина за скриптовану пријаву на Linux-у и macOS-у.
OpenVPN тражи корисничко име и лозинку на контролном терминалу, а датотека преусмерена на стандардни улаз није тај терминал. Управо овај детаљ објашњава скрипту која виси док лозинка стоји тамо у цеви. Упит црта клијент, а читање се узима са терминалског уређаја, па преусмеравање stdin не мења ништа. Нахраните клијент кроз један од његових документованих улаза и иста скрипта ће се повезати из првог покушаја.
Три улаза покривају скоро сваки случај, и сваки не успева на свој начин. Изаберите према упиту који клијент заиста приказује, а не према опцији коју је најлакше скриптовати.
Упит не долази са stdin
Када OpenVPN-у требају акредитиви, он отвара контролни терминал и чита тамо. Зато интерактивни тест изгледа добро, а иста наредба под cron-ом или unit датотеком стоји непомично са упитом уписаним у лог који нико не гледа. Неке градње се враћају на стандардни улаз када терминала нема, и та недоследност је гора од тврдог неуспеха, јер крије проблем до распоређивања.
Проверите окружење пре него што напишете било какав код: покрените клијент под истим корисником, са истим stdin-ом, као што ће то урадити планер или менаџер услуга. Ако се упит никада не појави у логу и процес не напредује, нешто чека терминал који не постоји.
Први улаз: датотека са акредитивима од два реда
Опција аутентификације прима путању, а датотека садржи тачно два реда, прво корисничко име па лозинка, и ништа друго. Наведите путању експлицитно уместо да се ослањате на подразумевано име датотеке, јер залутала датотека са акредитивима у радном директоријуму је начин на који погрешан налог дође у употребу. Поставите режим на 0600 и дајте власништво налогу који покреће клијент.
Клијент чита ту датотеку једном при покретању, па ротирање лозинке значи поновно покретање процеса. То је обично понашање које желите, и припада runbook-у поред поступка ротације.
Други улаз: askpass за лозинку кључа
Приватни кључ заштићен лозинком изазива други, другачији упит, и он има свој одговор из датотеке: опција askpass чита фразу из првог реда датотеке. За тунеле засноване на SSH еквивалент је askpass програм који клијент извршава и чији стандардни излаз постаје тајна.
Ниједан облик не ставља тајну у листу аргумената, и оба је остављају да постоји као датотека или као извршна датотека која је штампа. Заштита су дозволе датотеке и власништво процеса, не нејасност. Помоћник који понавља низ уграђен у код је тајна са додатним корацима.
Трећи улаз: сопствени CLI портал клијента
Пословни клијенти обично испоручују улазну тачку на командној линији која се повезује са именованим порталом без икаквог прозора, и то је подржани пут. На Linux-у клијент GlobalProtect излаже операције повезивања и увоза сертификата кроз свој CLI, а портали који користе сертификатску аутентификацију захтевају корак увоза пре него што аутоматизовано повезивање може да ради. Претпоставите га синтетизованим притисцима тастера: добијате стварни излазни статус, без зависности од фокуса прозора, и преживљава закључан екран.
Ако прво повезивање још увек захтева човека да прихвати сертификат, аутоматизација није завршена. Обавите увоз током подешавања и запишите га као предуслов.
Када ток захтева псеудотерминал
Секвенца која тражи лозинку па једнократни код нема једну датотеку за читање. Терминалски драјвер као Expect је прави алат, јер чека на сваки образац редом, и потребно му је да процес буде покренут пре него што уопште може нешто да упари.
Два неуспеха доминирају. Скрипта која чека упит без покретања клијента чека заувек, а Tcl није љуска, па се аритметика љуске написана унутар expect блока не израчунава онако како се чита. Држите заставицу за отклањање грешака укључену док градите обрасце, а затим је искључите.
Тајне које отичу, и где се крију
Све што се пренесе као аргумент видљиво је на листи процеса, па акредитиви припадају у датотеку или иза помоћника, никад на командну линију. Једнократни кодови се троше по дизајну и морају се створити за сваки покушај. Логови неуспеха често носе корисничко име а понекад и више, па их редагујте пре него што их било где пошаљете, и држите тајну изван самог профила, јер конфигурациона датотека са уграђеном лозинком заврши залепљена у тикете и репозиторијуме. Ротирање налога тада значи лов на сваку копију, и управо је то цена коју овај распоред избегава.
Прегледајте изабране улазе, а затим их повежите са unit датотеком или планером који ће заиста покретати клијент. Тунел живи тачно онолико колико живи тај процес.