OpenVPN slaptažodį nuskaito iš terminalo, o ne iš stdin
Kur OpenVPN iš tikrųjų nuskaito slaptažodį, kodėl failas stdin nepavyksta, ir trys palaikomi skriptinio prisijungimo būdai Linux ir macOS.
OpenVPN valdymo terminale prašo vartotojo vardo ir slaptažodžio, o failas, nukreiptas į standartinę įvestį, nėra tas terminalas. Ši viena detalė paaiškina scenarijų, kuris pakimba, nors slaptažodis guli tiesiai vamzdyje. Užklausą piešia klientas, o skaitymas vyksta iš terminalo įrenginio, todėl stdin nukreipimas nieko nekeičia. Aprūpinkite klientą vienu iš jo dokumentuotų įvesties kelių ir tas pats scenarijus prisijungs iš pirmo karto.
Trys keliai apima beveik visus atvejus, ir kiekvienas nepavyksta savaip. Rinkitės pagal užklausą, kurią klientas tikrai rodo, o ne pagal parinktį, kurią lengviausia įskriptinti.
Užklausa ateina ne iš stdin
Kai OpenVPN reikia prisijungimo duomenų, jis atidaro valdymo terminalą ir skaito ten. Todėl interaktyvus testas atrodo gerai, o ta pati komanda po cron ar unit failu stovi nejudėdama su užklausa, įrašyta į žurnalą, kurio niekas nežiūri. Kai kurie build'ai, kai nėra terminalo, grįžta prie standartinės įvesties, ir šis nenuoseklumas yra blogiau už kietą gedimą, nes slepia problemą iki diegimo.
Patikrinkite aplinką prieš rašydami bet kokį kodą: paleiskite klientą tuo pačiu vartotoju, su tuo pačiu stdin, kaip tai darys planuotojas ar paslaugų tvarkyklė. Jei užklausa niekada nepasirodo žurnale ir procesas nejuda į priekį, kažkas laukia terminalo, kurio nėra.
Pirmas kelias: dviejų eilučių prisijungimo duomenų failas
Autentifikavimo parinktis priima kelią, o faile yra lygiai dvi eilutės, pirma vartotojo vardas, paskui slaptažodis, ir nieko daugiau. Nurodykite kelią aiškiai, o ne pasikliaukite numatytuoju failo vardu, nes paklydęs prisijungimo duomenų failas darbo kataloge yra būdas, kuriuo netinkama paskyra patenka į naudojimą. Nustatykite režimą 0600 ir suteikite nuosavybę paskyrai, kuri paleidžia klientą.
Klientas tą failą nuskaito vieną kartą paleidimo metu, todėl slaptažodžio keitimas reiškia proceso perkrovimą. Paprastai tai ir yra norimas elgesys, ir jis priklauso runbook'ui šalia keitimo procedūros.
Antras kelias: askpass raktinio žodžio frazei
Fraze apsaugotas privatusis raktas sukelia antrą, kitokią užklausą, ir ji turi savo atsakymą iš failo: parinktis askpass nuskaito frazę iš pirmos failo eilutės. SSH pagrindu veikiantiems tuneliams atitikmuo yra askpass programa, kurią vykdo klientas ir kurios standartinė išvestis tampa paslaptimi.
Nė viena forma neįdeda paslapties į argumentų sąrašą, ir abi palieka ją egzistuoti kaip failą arba kaip vykdomąją programą, kuri ją išspausdina. Apsauga yra failo teisės ir proceso nuosavybė, o ne neaiškumas. Pagalbinė programa, kuri atkartoja kode įrašytą eilutę, yra paslaptis su papildomais žingsniais.
Trečias kelias: paties portalo kliento CLI
Įmonių klientai paprastai pateikia komandinės eilutės įėjimo tašką, kuris jungiasi prie įvardyto portalo be jokio lango, ir tai yra palaikomas kelias. Linux sistemoje GlobalProtect klientas per savo CLI siūlo prisijungimo ir sertifikato importavimo operacijas, o portalams, naudojantiems sertifikatų autentifikavimą, reikia importavimo žingsnio, kad automatizuotas prisijungimas galėtų veikti. Rinkitės jį, o ne sintetinius klavišų paspaudimus: gaunate tikrą išėjimo būseną, nepriklausote nuo lango fokusavimo, ir jis išgyvena užrakintą ekraną.
Jei pirmam prisijungimui vis dar reikia žmogaus, kad priimtų sertifikatą, automatizavimas nebaigtas. Atlikite importavimą sąrankos metu ir užrašykite jį kaip būtiną sąlygą.
Kai srautui reikia pseudo-terminalo
Seka, kuri prašo slaptažodžio, o paskui vienkartinio kodo, neturi vieno failo, kurį būtų galima skaityti. Terminalo tvarkyklė, pavyzdžiui, Expect, yra tinkamas įrankis, nes ji paeiliui laukia kiekvieno šablono, ir jai reikia paleisto proceso, kol ji galės ką nors sugretinti.
Vyrauja dvi nesėkmės. Scenarijus, kuris laukia užklausos nepaleidęs kliento, laukia amžinai, o Tcl nėra shell, todėl shell aritmetika, parašyta expect bloko viduje, nėra įvertinama taip, kaip perskaitoma. Laikykite derinimo vėliavėlę įjungtą, kol kuriate šablonus, tada išjunkite.
Paslaptys, kurios nuteka, ir kur jos slepiasi
Viskas, kas perduodama kaip argumentas, matoma procesų sąraše, todėl prisijungimo duomenys priklauso failui arba pagalbinės programos užnugariui, niekada komandinei eilutei. Vienkartiniai kodai sunaudojami pagal dizainą ir turi būti sugeneruoti kiekvienam bandymui. Nesėkmių žurnalai dažnai neša vartotojo vardą ir kartais daugiau, todėl redaguokite juos prieš siųsdami kur nors, ir laikykite paslaptį už paties profilio ribų, nes konfigūracijos failas su įterptu slaptažodžiu įklijuojamas į bilietus ir saugyklas. Tada paskyros keitimas reiškia kiekvienos kopijos medžioklę, ir būtent šios išlaidos ši tvarka išvengia.
Audituokite pasirinktus kelius, tada prijunkite juos prie unit failo ar planuotojo, kuris iš tikrųjų paleis klientą. Tunelis gyvuoja lygiai tiek, kiek tas procesas.