Nola automatizatu token kodea itxaroten duen VPN saio-hasiera
Terminalean galdetzen duen CLI VPN bezero batek pasahitza soilik hodi bidez bidaltzen duen scripta blokeatzen du. Egin bost egiaztapen hauek expect-era jo aurretik.
Hornitzaile baten VPN bezeroa abiarazten duen script bat denbora-muga iritsi arte zintzilik geratzen da, eta erregistroak erakusten du bezeroak inork idatzi ez zuen egiaztapen-kode bat eskatzen duela. Pasahitza bidali zen, beraz ondorio nabarmena pasahitza okerra dela da. Ez da. Kode-eskaera elkarrizketa bereizi bat da kanal bereizi batean, eta zure scriptak ez zuen inoiz ireki.
Egin beheko bost egiaztapenak hurrenez hurren. Gelditu huts egiten duen lehenengoan, geroagoko urrats bakoitzak aurrekoek balio dutela suposatzen baitu.
1. egiaztapena: bezeroak sarrera estandarra irakurtzen du, behintzat?
Probatu automatizaziorik idatzi aurretik: bidali sekretu faltsu bat bezeroari hodi bidez eta begiratu zer gertatzen den. Bere eskaera inprimatzen badu eta gero itxaroten badu, ez du hodia irakurtzen.
Bezero askok terminal-gailua zuzenean irekitzen dute, edo terminala ez den fluxu batetik sekretua hartzeari uko egiten diote, hodi galdu batek pasahitza filtratu ez dezan. OpenVPN da dokumentatutako salbuespena, --auth-user-pass-ek fitxategi-bide bat hartzen duelako. Kode bakarreko bat eskatzen duten hornitzaileen bezeroek ez dute normalean baliokide den aukerarik, eta haien eskaera zure scriptak inoiz eman ez zuen terminal baten zain dago.
2. egiaztapena: seme-alabaren prozesuak terminala du?
pty batek terminala esleitzen dio semeari, eta horrek eskaerak ordenan erantzun ditzakezun irteera irakurgarri bihurtzen ditu.
import pexpect
child = pexpect.spawn("openconnect vpn.example.net", encoding="utf-8", timeout=30)
child.expect("GROUP:")
child.sendline("staff")
child.expect("USERNAME:")
child.sendline("alice")
child.expect("PASSWORD:")
child.sendline(PASSWORD)
child.expect("Connected as", timeout=60)Goiko eskaera-kateak adibidezkoak dira; kopiatu zure bezeroak inprimatzen duen testu zehatza, letra larriak eta puntuazioa barne. Itxaropen bakoitzak denbora-muga bat du, eta itxitako seme batek salbuespen bat botatzen du egoera itzuli beharrean, beraz bildu sekuentzia eta hartu fitxategi-amaiera huts egitekotzat. Kontuan izan bloke honek zer ez duen egiten: semea scriptarekin hiltzen da, pty ez delako desuztartzeko mekanismoa eta disown shell barneko komandoa delako, zure scriptak sortutako prozesura iritsi ezin dena.
3. egiaztapena: badago onartutako sarrera ez-interaktiborik?
Pantaila-arrasketak bezeroaren eguneraketekin hausten dira, beraz bilatu lehenengo dokumentatutako aukera bat.
Egiaztatu laguntza-irteeran token edo kode bakarreko aukera dagoen, eta egiaztatu zerbitzuak pasahitz-eremuan erantsitako kodea onartzen duen. Bezeroak kredentzialen fitxategia irakurtzen duen tokietan, eman fitxategia eskaera baten ordez:
openvpn --config office.ovpn --auth-user-pass <(printf "%s\n%s\n" "$USER_NAME" "$PASSWORD")Prozesu-ordezkapenak bide irakurgarria ematen dio bezeroari /dev/fd eskaintzen duten sistemetan. Sekretua sekretu izaten jarraitzen du bezeroaren ikuspegitik, beraz mantendu erregistroetatik, shell-historialetik eta prozesu-zerrendetatik kanpo. Bezeroak /dev/fd baztertzen badu edo kredentzialen bidea behin baino gehiagotan irekitzen badu, idatzi benetako fitxategi bat baimen murriztaileekin eta ezabatu script berberean.
4. egiaztapena: scripta baino gehiago iraungo du tunelak?
Lehenespenez tunela gurasoarekin hiltzen da, hasierako script batek behar duenaren kontrakoa.
disown -h-ek soilik laguntzen du bezeroa shell-lan gisa abiarazi baduzu, shell horren lan-taulak editatzen baititu eta zure scriptak pty bidez sortutako prozesura iritsi ezin baita. Zerbitzu-kudeatzaile bat da leku hobea gainbegiratu gabe berriz konektatu behar duen guztiarentzat, bezeroa berrabiarazten baitu eta zergatik hil zen erregistratzen baitu. Nolanahi ere, itxaron kode berri bat berriz konektatu ondoren: erabilera bakarreko tokena lehen autentikazio arrakastatsuak agortzen du.
Begiratu zer egiten dion sudo-k sekuentziari. sudo-ren pasahitz-eskaera ez da VPN-arena, eta VPN-ren pasahitzarekin erantzutea da, bestela zuzena den itxaropen-ordenak huts egiteko modurik ohikoena.
5. egiaztapena: pertsona baten kodea script batean egon behar da?
Hau da jendeak saltatzen duen egiaztapena. Tokena pertsona batena da, eta ordutegi baten arabera altxatu behar duen tunela makinarena.
Lan batek gainbegiratu gabe berriz konektatu behar badu, galdetu ea makina-ziurtagiri batek edo zerbitzu-kontu batek saio-hasiera interaktiboa ordezkatu dezakeen. Norbaiten erabilera bakarreko kodea automatizatzeak bigarren faktorea gordetako sekretu bihurtzen du, eta hori politika-aldaketa da, ez script egiteko erraztasuna. Zerbitzuak biak onartzen dituenean, aukeratu lanak benetan nola funtzionatzen duen bat datorren kredentziala. Idatzi erantzuna, hurrengo pertsonak galdetuko baitu zergatik gordetzen duen scriptak token bat.
Nola ikusten den funtzionatzen duen script bat
Scriptak iritsi zen urratsa inprimatzen du, inoiz ez sekretua, eta zero ez den kodearekin irteten da itxaropenen bat huts eginez gero.
Probatu nahita hautsiz: pasahitz okerra, talde okerra, iraungitako tokena. Hutsegite bakoitzak izeneko urrats batean gelditu beharko luke zintzilikatu beharrean. Gero exekutatu behin benetako zerbitzuaren aurka eta egiaztatu tunela scriptetik kanpotik, ez barrutik.