Cum să treci OpenConnect în fundal după o autentificare interactivă
Termină autentificarea în prim-plan, apoi predă tunelul modului de fundal propriu al clientului. Verificările care îl mențin ușor de găsit și de oprit.
Termini solicitarea MFA, tunelul urcă, iar închiderea terminalului ia conexiunea cu ea. Este o problemă de supraveghere, nu de autentificare, iar OpenConnect are deja comutatorul care o rezolvă. Soluția este să lași clientul să se ramifice în fundal după ce pornirea s-a încheiat, când partea interactivă s-a terminat cu adevărat. Urmează o succesiune de verificări: parcurge-le în ordine și oprește-te la prima care nu se aplică gateway-ului tău.
Confirmă ce cere gateway-ul la autentificare
Înainte să scrii o comandă, notează calea de acreditări impusă de implementare. Doar certificat, parolă plus token și o rundă prin browser via un furnizor SAML se comportă diferit, iar modul de fundal nu poate sări peste niciuna. Opțiunea schimbă ce se întâmplă după pornire, niciodată în timpul ei.
Soluția tentantă este automatizarea solicitării. Un înveliș care scrie un răspuns fix când recunoaște o solicitare de parolă se strică în momentul în care gateway-ul cere un cod de unică folosință și lasă o acreditare într-un fișier pe care alte conturi îl pot citi. Dacă o persoană trebuie să aprobe sesiunea, ține persoana în proces.
Rulează prima sesiune în prim-plan și citește ieșirea
Conectează-te o dată normal și lasă tot handshake-ul să se tipărească. Notează protocolul folosit, calea certificatului sau a tokenului, adresa tunelului atribuită de server și fiecare avertisment înainte de acceptarea conexiunii. Acea transcriere este linia ta de bază și singura modalitate ieftină de a distinge mai târziu o problemă a clientului de o schimbare a gateway-ului. Salveaz-o în afara bufferului terminalului.
Apoi repetă aceeași invocare cu modul de fundal și un fișier PID adăugat, de exemplu openconnect --background --pid-file /run/openconnect.pid vpn.example.net, păstrând protocolul și opțiunile de autentificare cerute de gateway pe aceeași linie. Manualul OpenConnect descrie opțiunea ca o continuare în fundal după terminarea pornirii, și exact de aceea faza interactivă trebuie să se încheie prima.
Fă procesul care rulează ușor de găsit și de oprit
Un fișier PID este dovadă doar cât timp corespunde unui proces viu. Pune-l într-un director deținut de contul de serviciu și compară numărul înregistrat cu tabelul de procese înainte de a semnala ceva. Repornirile și căderile lasă fișierul în urmă, iar un fișier învechit este motivul obișnuit pentru care un script de oprire raportează succes în timp ce tunelul încă rulează. Tratează verificarea ca parte a procedurii de oprire, nu ca pas opțional.
Trimite semnalul către PID-ul verificat, apoi confirmă că interfața tunelului a dispărut cu adevărat în loc să te bazezi pe starea de ieșire. Dacă clientul are nevoie de privilegii ridicate pentru a configura interfața, semnalul trebuie să vină de la un cont autorizat să îl trimită.
Nu stivui modul de fundal sub un supervizor
systemd și supervizori similari se așteaptă să dețină procesul pe care l-au lansat, de aceea un client care se ramifică îi încurcă. Supervizorul vede lansatorul ieșind în timp ce conexiunea reală trăiește, așa că logica de repornire, raportarea stării și termenele de oprire descriu ceva ce nu mai este adevărat. Scrie unitatea în aranjamentul de prim-plan acceptat și lasă supervizorul să facă treaba de demon.
Păstrează --background pentru sesiunile pe care o persoană le începe și apoi pleacă. Dacă cerința este un tunel care există înainte ca cineva să se autentifice, lipsește o identitate neinteractivă aprobată plus un plan de reînnoire, iar niciun indicator de linie de comandă nu oferă vreunul. Adăugarea indicatorului la un script de pornire produce un tunel care eșuează silențios la prima acreditare expirată.
Tratează cookie-ul de sesiune ca o acreditare
OpenConnect documentează o fază de autentificare separată prin --authenticate, iar materialul rezultat poate fi returnat cu --cookie-on-stdin. Acea pereche există pentru lucrul de integrare, iar ce produce este la fel de sensibil ca parola care l-a creat.
Ține valoarea în afara istoricului shell-ului, a jurnalelor și a oricărui tichet pe care îl deschizi. Un script de predare trebuie să păstreze și informațiile verificate despre punctul final pe care clientul le-a primit împreună cu cookie-ul; dacă le pierzi, o rulare ulterioară se poate conecta la un gazdă pe care nu ai autentificat-o niciodată, ceea ce este mai rău decât o conexiune care pur și simplu eșuează.
Parcurge lista înainte de a închide terminalul
Patru lucruri ar trebui să fie adevărate: autentificarea interactivă s-a terminat în prim-plan, fișierul PID indică un proces verificat, problema supervizorului este rezolvată într-un sens sau altul și cookie-ul are un plan de stocare care nu este un fișier text simplu. Când toate patru sunt valabile, plecarea de la terminal este sigură și tunelul continuă.
Dacă una eșuează, corectează acel punct înainte de a le atinge pe celelalte, pentru că verificările rămase nu îl pot compensa. Păstrează și transcrierea din prim-plan a primei rulări: data viitoare când tunelul cade fără avertisment, acea linie de bază separă o schimbare din partea gateway-ului de una din partea clientului.