Automatizuokite VPN prisijungimą, kai klientas neturi API arba CLI
Pasirinkite scenarijaus kelią pagal tai, ką klientas atskleidžia: operacinės sistemos valdomą profilį, tiekėjo CLI, skaitantį slaptažodį iš stdin, arba GUI automatizavimą kaip paskutinę priemonę.
Tai sprendžia trys klausimai, ir tik trys. Ar klientas sukuria operacinėje sistemoje prisijungimo įrašą, kuris išlieka po perkrovimo? Ar jis pateikia komandinę eilutę, galinčią paimti slaptažodį ne iš savo argumentų sąrašo? Ar jo tapatybės reikalavimas verčia žmogų atsakyti į naršyklės raginimą? Atsakykite šia tvarka ir pasirinkimas nustoja būti skonio dalyku, nes suplanuotas darbas gali būti tik tiek be galvos, kiek leidžia silpniausias iš trijų atsakymų.
Suderinkite klientą su trimis scenarijais valdomais sluoksniais
Vietinis OS profilis, tiekėjo CLI, klientas tik su GUI ir klientas su naršyklės SSO reikalauja keturių skirtingų metodų. Pirmieji du išgyvena perkrovimus be priežiūros, o perkrovimas be priežiūros yra visa esmė. Kiti du prieš scenarijų reikalauja projektinio sprendimo.
| What the client exposes | What to script | What still bites |
|---|---|---|
| OS-native connection entry | rasdial, scutil --nc, nmcli | Tunnel is up before DNS and routes settle |
| Vendor CLI reading stdin | CLI wrapped by the scheduler, secret from the credential store | Prompt text changes between releases |
| GUI only | Pinned version plus a state assertion | Locale and DPI break the click targets |
Pirmasis kelias: profilį jau valdo operacinė sistema
Tai pigiausias kelias ir tas, kurį dauguma praleidžia. Windows sistemoje rasdial "Office" prisijungia, o rasdial "Office" /disconnect jį uždaro; rasphone -d "Office" valdo tą patį įrašą per rinkimo sąsają. macOS išvardija išsaugotas paslaugas su scutil --nc list ir paleidžia vieną su scutil --nc start. Linux perduoda darbą NetworkManager.
rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show OfficeŠios sąsajos pažįsta tik OS valdomus profilius, todėl negali valdyti bet kokio trečiosios šalies kliento. Kai profilio nėra, sukurkite jį vieną kartą ir leiskite scenarijui jį patikrinti, o ne kurti iš naujo kiekvieno paleidimo metu. Padarykite scenarijų idempotentišką: perskaitykite dabartinę būseną, prisijunkite tik kai atjungta, tada patikrinkite privatų vardą, kurio darbui tikrai reikia.
Antrasis kelias: tiekėjas pateikia komandinę eilutę
Kai kurie klientai atskleidžia pakankamai komandinės eilutės, kad juos būtų galima apvynioti: Cisco AnyConnect ilgus metus turi tik prisijungimo pagalbininką, o OpenConnect kalba AnyConnect, GlobalProtect ir Pulse protokolais iš vieno binario. Svarbus reikalavimas yra ne vėliavėlių sąrašas, o tai, iš kur ateina slaptažodis, nes slaptažodį argumentų sąraše gali perskaityti bet kas, kas gali išvardinti procesus.
printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
--user "$VPN_USER" --passwd-on-stdin vpn.example.comFortiClient ir kai kurie GlobalProtect rinkiniai visai neturi palaikomo CLI, o bendruomenės klientas ar tiekėjo licencijuotas pakaitalas yra pirkimo sprendimas, o ne apeinimas. CI suteikite paslaugos paskyrai teises būtent tam binariui, o ne apvalkalui, kad įterptas argumentas negalėtų tapti root komanda.
Trečiasis kelias: GUI automatizavimas ir kodėl jis paskutinis
Kai oficialus klientas neturi sąsajos, scenarijai spaudžia mygtukus per lango pranešimus arba SendKeys. Tai trapu versijai ir kalbai, gali palikti pusiau prisijungusią sesiją ir tyliai nepavyksta, kai dialogas pasirodo ne ta kalba. Jei renkatės šį kelią, užfiksuokite kliento versiją, po to patikrinkite susidariusią ryšio būseną ir laikykite dokumentuotą rankinį atsarginį planą šalia scenarijaus.
Tas pats atsargumas galioja priverstiniam kliento atjungimui nužudant jo procesą. Tunelis gali pergyventi procesą, arba prižiūrėtojas gali jį paleisti iš naujo, todėl nužudyk-ir-paleisk taip pat nėra patikimas atstatymas.
Kas lūžta po to, kai tunelis pakyla
Sėkmingas prisijungimas įrodo tik autentifikavimą ir nieko daugiau. Išbandykite išteklių, dėl kurio darbas egzistuoja, su jo protokolu ir trumpu laiko limitu, ir nepavykimo pranešime įvardykite etapą. Profiliai, sertifikatai ir išsaugoti prisijungimo duomenys, matomi jūsų darbalaukyje, gali būti nematomi paslaugos sesijai, todėl paleiskite darbą vieną kartą su paties planuoklio paskyra, prieš juo pasitikėdami.
Apribokite pakartojimus. Ciklas, kartojantis atmestus prisijungimo duomenis, užrakina paskyras, o MFA raginimo be galvos darbas negali atsakyti be registracijos dizaino; scenarijumi kartojami bandymai prieš naršyklės SSO srautą tik degina bandymus. Pirmenybę teikite MDM pristatomam VPN kroviniui arba konfigūracijos profiliui florai, kur platforma valdo prisijungimo duomenų gyvavimo ciklą, ir laikykite scenarijus tiems klientams, kurių taip valdyti negalima.
Užregistruokite išėjimo kodą ir pirmą nepavykusį išteklių, o ne faktą, kad scenarijus veikė. Būtent ta viena eilutė paverčia planuoklio įspėjimą penkių minučių diagnoze.