OpenVPN číta heslo z terminálu, nie zo stdin
Kde OpenVPN skutočne číta heslo, prečo súbor na stdin zlyhá a tri podporované spôsoby skriptovaného prihlásenia v Linuxe a macOS.
OpenVPN žiada používateľské meno a heslo na riadiacom termináli a súbor presmerovaný na štandardný vstup nie je ten terminál. Práve tento jeden detail vysvetľuje skript, ktorý visí, hoci heslo leží priamo v rúre. Výzvu kreslí klient a čítanie prebieha z terminálového zariadenia, takže presmerovanie stdin nič nemení. Nakŕmte klienta jedným z jeho dokumentovaných vstupov a ten istý skript sa pripojí na prvý pokus.
Tri vstupy pokrývajú takmer každý prípad a každý zlyháva po svojom. Vyberajte podľa výzvy, ktorú klient skutočne zobrazuje, nie podľa možnosti, ktorá sa najľahšie skriptuje.
Výzva neprichádza zo stdin
Keď OpenVPN potrebuje prihlasovacie údaje, otvorí riadiaci terminál a číta tam. Preto interaktívny test vyzerá dobre, kým ten istý príkaz pod cronom alebo v unit súbore stojí nečinne s výzvou zapísanou v logu, ktorý nikto nesleduje. Niektoré zostavenia padajú späť na štandardný vstup, keď terminál neexistuje, a táto nekonzistencia je horšia ako tvrdé zlyhanie, pretože skrýva problém až do nasadenia.
Preskúmajte prostredie skôr, než napíšete akýkoľvek kód: spustite klienta pod tým istým používateľom a s tým istým stdin, s akým ho spustí plánovač alebo správca služieb. Ak sa výzva v logu nikdy neobjaví a proces nepostupuje, niečo čaká na terminál, ktorý neexistuje.
Prvý vstup: dvojriadkový súbor s údajmi
Možnosť overenia prijíma cestu a súbor obsahuje presne dva riadky, najprv používateľské meno, potom heslo, a nič iné. Zadávajte cestu výslovne namiesto spoliehania sa na predvolený názov súboru, pretože zablúdený súbor s údajmi v pracovnom adresári je spôsob, akým sa do používania dostane nesprávny účet. Nastavte režim na 0600 a vlastníctvo priraďte účtu, ktorý klienta spúšťa.
Klient ten súbor číta raz pri štarte, takže rotácia hesla znamená reštart procesu. Zvyčajne je to správanie, ktoré chcete, a patrí do runbooku vedľa postupu rotácie.
Druhý vstup: askpass pre heslo ku kľúču
Súkromný kľúč chránený heslom vyvolá druhú, odlišnú výzvu a tá má svoju vlastnú odpoveď zo súboru: možnosť askpass číta heslo z prvého riadku súboru. Pre tunely založené na SSH je ekvivalentom program askpass, ktorý klient spúšťa, a jeho štandardný výstup sa stane tajomstvom.
Ani jedna forma nedáva tajomstvo do zoznamu argumentov a obe ho nechávajú existovať ako súbor alebo ako spustiteľný súbor, ktorý ho vypíše. Ochranou sú práva súboru a vlastníctvo procesu, nie neznalosť. Pomocník, ktorý opakuje reťazec zapečený v kóde, je tajomstvo s krokmi navyše.
Tretí vstup: vlastné CLI portálového klienta
Podnikoví klienti zvyčajne dodávajú vstupný bod v príkazovom riadku, ktorý sa pripája k pomenovanému portálu bez okna, a to je podporovaná cesta. V Linuxe klient GlobalProtect sprístupňuje operácie pripojenia a importu certifikátu cez svoje CLI a portály s certifikátovým overovaním potrebujú krok importu, kým môže automatizované pripojenie fungovať. Uprednostnite ho pred syntetizovanými stlačeniami klávesov: získate skutočný návratový stav, žiadnu závislosť od fokusu okna a prežije uzamknutú obrazovku.
Ak prvé pripojenie stále potrebuje človeka, aby prijal certifikát, automatizácia nie je dokončená. Urobte import počas nastavenia a zapíšte ho ako predpoklad.
Keď tok potrebuje pseudo-terminál
Postupnosť, ktorá žiada heslo a potom jednorazový kód, nemá jediný súbor na čítanie. Terminálový ovládač ako Expect je správny nástroj, pretože čaká na každý vzor postupne, a potrebuje spustený proces, kým vôbec môže niečo porovnať.
Prevádzajú dve zlyhania. Skript, ktorý čaká na výzvu bez spustenia klienta, čaká večne, a Tcl nie je shell, takže shellová aritmetika napísaná v bloku expect sa nevyhodnocuje tak, ako sa číta. Nechajte počas stavby vzorov zapnutý prepínač ladenia a potom ho vypnite.
Tajomstvá, ktoré unikajú, a kde sa skrývajú
Čokoľvek odovzdané ako argument je vidieť v zozname procesov, preto prihlasovacie údaje patria do súboru alebo za pomocníka, nikdy na príkazový riadok. Jednorazové kódy sa spotrebúvajú konštrukčne a musia sa vytvoriť pre každý pokus. Protokoly zlyhaní často nesú používateľské meno a niekedy viac, preto ich redigujte, kým ich niekam pošlete, a držte tajomstvo mimo samotného profilu, pretože konfiguračný súbor s vloženým heslom sa ocitne v tiketoch a repozitároch. Rotácia účtu potom znamená hon na každú kópiu, a presne tejto cene sa toto usporiadanie vyhýba.
Skontrolujte zvolené vstupy a potom ich zapojte do unit súboru alebo plánovača, ktorý klienta skutočne spustí. Tunel žije presne tak dlho ako ten proces.