Cum să scrii un script pentru autentificarea AnyConnect pe Linux și macOS
Binarele vpn citesc răspunsurile de la intrarea standard în ordinea solicitărilor. Construiește secvența, citeaz-o o dată, ține-o în afara listei de procese și testează mai întâi o resursă.
Scriptul se termină cu zero, tunelul apare și următoarea rulare este refuzată înainte de a cere măcar o parolă. Sau aceeași comandă funcționează într-un terminal și eșuează dintr-o sarcină programată cu o eroare «evenimentul nu a fost găsit» care nu numește nimic util. Ambele sunt conversația pe intrarea standard a clientului AnyConnect care merge prost, nu o defecțiune de rețea. Tratează autentificarea ca pe o întrebare și un răspuns scrise, iar eșecurile devin previzibile și mici.
De ce aceeași comandă eșuează în interiorul unui script
Clientul citește răspunsurile de la intrarea standard, o linie pentru fiecare solicitare, în ordinea în care gateway-ul le cere. Orice schimbă numărul de solicitări, cum ar fi un banner nou, un selector de grup sau o provocare de al doilea factor, deplasează fiecare răspuns ulterior cu o linie. Apoi clientul citește un nume de utilizator acolo unde aștepta o parolă și raportează un eșec care nu indică niciunul dintre ele.
O parolă care conține semnul exclamării adaugă un al doilea eșec mai silențios. Între ghilimele duble, shell-ul o extinde cu mult înainte ca clientul să vadă ceva.
Pune conținutul între ghilimele simple și caracterul călătorește intact. Aceasta este întreaga corectare, și explică o întreagă clasă de rapoarte în care aceeași acreditare funcționează când este tastată și eșuează când este salvată. Verifică ce a făcut shell-ul înainte de a verifica gateway-ul: tipărește conținutul printr-un înveliș care arată octeții exacți și numără liniile. Majoritatea acestor investigații se termină exact acolo.
Scrie răspunsurile în ordinea în care clientul le cere
Rulează clientul o dată interactiv și notează fiecare solicitare în ordine. Selectorul de grup apare numai când gateway-ul publică mai multe profiluri, iar solicitarea de banner apare numai când unul este configurat. Fișierul de răspunsuri trebuie să corespundă gateway-ului către care ești într-adevăr îndreptat, nu celui din documentație.
Apoi construiește fișierul cu exact acea secvență, un răspuns pe linie. Indexul grupului este numărul pe care clientul îl listează, nu poziția unui profil într-un document. Acceptă bannerul numai dacă gateway-ul tău trimite unul, și adaugă o linie pentru fiecare întrebare suplimentară despre care se știe că o pune acel gateway. Pornește clientul cu opțiunea neinteractivă ca să consume fișierul în loc să aștepte un terminal.
connect vpn.lab.example
0
username
password
y
exit/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txtAceeași secvență poate veni printr-o conductă atunci când preferi să nu ții un fișier pe disc. Regulile de citare decid în continuare dacă supraviețuiește.
Ține acreditarea în afara listei de procese
Un argument din linia de comandă este citibil de orice utilizator local pe toată durata de viață a procesului, așa că parola aparține unui fișier sau unei conducte și niciodată listei de argumente. Fă acel fișier citibil numai pentru contul care rulează scriptul, și șterge-l când sarcina se termină. Pe macOS binarul stă de obicei pe aceeași cale ca pe Linux, dar confirmă locația instalată în loc să o presupui. Un înveliș care testează ambele căi este mai scurt decât raportul incidentului.
printf 'username\npassword\ny\n' | /opt/cisco/anyconnect/bin/vpn -s connect vpn.lab.exampleNu lăsa nici scriptul să reîncerce la nesfârșit. Un banner schimbat sau o parolă expirată peste noapte transformă un fișier de răspunsuri fix într-o buclă de reîncercări, iar acea buclă este cea care blochează contul.
Eșuează o dată, tipărește textul de eroare al clientului însuși și ieși. O sarcină programată are nevoie de aceeași revizuire a identității și a disponibilității acreditărilor ca orice altă sarcină nesupravegheată, pentru că o acreditare care expiră în tăcere nu se poate distinge de o pană la trei dimineața.
Confirmă sesiunea înainte de a avea încredere în codul de ieșire
O stare conectată dovedește că tunelul există și nimic mai mult. Testează o resursă care trebuie să fie accesibilă prin el înainte ca scriptul să înceapă munca reală, și tratează un eșec acolo ca o defecțiune diferită de o autentificare ratată. Altfel vei reîncerca o conexiune perfect bună care pur și simplu nu poate ajunge la destinație.
Întreabă clientul despre starea lui înainte și după deconectare, pentru că o sesiune învechită poate refuza următoarea conectare în timp ce scriptul tău raportează succes.
/opt/cisco/anyconnect/bin/vpn state
/opt/cisco/anyconnect/bin/vpn disconnectÎnregistrează ieșirea stării lângă codul de ieșire, pentru că un cod singur nu poate separa o autentificare refuzată de o sesiune care nu s-a închis niciodată. Când gateway-ul cere un al doilea factor sau o aprobare interactivă, oprește scrierea acelui pas ca script și folosește în schimb mecanismul pe care clientul îl acceptă. Un fișier de răspunsuri fix este o comoditate pentru o acreditare pe care o controlezi, nu o cale de a ocoli un pas de autentificare pe care nu îl controlezi. Ține domeniul atât de îngust și acesta rămâne un script scurt.
Când un fișier de răspunsuri fix este instrumentul greșit
Un al doilea factor sau o solicitare de aprobare înfrâng complet modelul, iar aceasta este o limită de proiectare, nu un rebus de script. Folosește orice mecanism pe care clientul îl acceptă pentru acel pas în loc să ghicești răspunsul dinainte. Un fișier fix funcționează numai pentru acreditări care rămân aceleași între rulări.
Două stiluri mai vechi de acreditări sunt și ele confundate cu AnyConnect. Un profil vpnc vorbește alt protocol și vrea numele grupului ca identificator IPSec, apoi un secret de grup partajat, apoi datele propriului cont.
Deoarece protocoalele diferă, vpnc nu poate ajunge la un gateway care publică numai profiluri AnyConnect, iar alternativa deschisă obișnuită pentru acel serviciu este openconnect cu protocolul anyconnect selectat. Un fișier pcf aparține clientului Cisco vechi și, deși gazda, numele grupului și parola grupului pot fi reintroduse într-un client care încă vorbește Cisco IPsec, fișierul nu se transferă între clienți. Un port neobișnuit sau un mod de tunelare nestandard se pierd de obicei în acel transfer. Decide ce protocol oferă gateway-ul înainte de a alege un instrument.