Avtomatizirajte prijavo v VPN, ko odjemalec nima API ali CLI
Izberite pot skripta glede na to, kaj odjemalec izpostavlja: profil v lasti operacijskega sistema, CLI ponudnika, ki bere skrivnost s stdin, ali GUI-avtomatizacijo kot zadnjo možnost.
To odločajo tri vprašanja in samo tri. Ali odjemalec ustvari vnos povezave v operacijskem sistemu, ki preživi ponovni zagon? Ali prinaša ukazno vrstico, ki lahko vzame skrivnost od drugod kot s svojega seznama argumentov? Ali njegova zahteva po identiteti sili človeka, da odgovori na poziv v brskalniku? Odgovorite v tem vrstnem redu in izbira ne bo več stvar okusa, ker je načrtovana naloga lahko le toliko brezglava, kolikor dopušča najšibkejši od treh odgovorov.
Ujemite odjemalca s tremi skriptljivimi plastmi
Izvorni profil OS, CLI ponudnika, odjemalec samo z GUI in odjemalec s SSO v brskalniku zahtevajo štiri različne pristope. Prva dva preživita ponovne zagone brez nadzora, in ponovni zagon brez nadzora je bistvo. Druga dva zahtevata oblikovalsko odločitev, preden zahtevata skript.
| 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 |
Prva pot: profil že ima operacijski sistem
To je najcenejša pot in tista, ki jo večina spregleda. V Windows se rasdial "Office" poveže, rasdial "Office" /disconnect pa povezavo zapre; rasphone -d "Office" vodi isti vnos skozi vmesnik za klicanje. macOS navede shranjene storitve z scutil --nc list in eno zažene z scutil --nc start. Linux preda delo NetworkManagerju.
rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show OfficeTi vmesniki poznajo samo profile v lasti OS, zato ne morejo voditi poljubnega odjemalca tretje strani. Ko profila ni, ga ustvarite enkrat in pustite skriptu, da ga preveri, namesto da bi ga znova ustvarjal pri vsakem zagonu. Naredite skript idempotenten: preberite trenutno stanje, povežite se le ob prekinitvi in nato preizkusite zasebno ime, ki ga naloga resnično potrebuje.
Druga pot: ponudnik prinese ukazno vrstico
Nekateri odjemalci razkrijejo dovolj ukazne vrstice, da jih je mogoče oviti: Cisco AnyConnect ima leta pomočnika samo za povezovanje, OpenConnect pa govori protokole AnyConnect, GlobalProtect in Pulse iz ene same binarne datoteke. Zahteva, ki šteje, ni seznam zastavic, ampak od kod prihaja skrivnost, ker lahko geslo na seznamu argumentov prebere vsak, ki zna našteti procese.
printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
--user "$VPN_USER" --passwd-on-stdin vpn.example.comFortiClient in nekatere gradnje GlobalProtect nimajo nobenega podprtega CLI, skupnostni odjemalec ali nadomestek z licenco ponudnika pa je odločitev o nabavi, ne obhod. V CI dodelite servisnemu računu pravice na točno tej binarni datoteki, ne na lupino, da vbrizgan argument ne more postati ukaz root.
Tretja pot: GUI-avtomatizacija in zakaj je zadnja
Ko uradni odjemalec nima vmesnika, skripti klikajo gumbe prek sporočil oken ali SendKeys. To je krhko glede na različico in jezik, lahko pusti napol povezano sejo in tiho odpove, ko se pogovorno okno pojavi v napačnem jeziku. Če se odločite za to pot, pripnite različico odjemalca, nato preverite nastalo stanje povezave in ob skriptu imejte dokumentirano ročno rezervno pot.
Enaka previdnost velja za prisilno prekinitev odjemalca z ubijanjem njegovega procesa. Tunel lahko preživi proces ali pa ga nadzornik znova zažene, zato tudi ubij-in-znova-zaženi ni zanesljiva ponastavitev.
Kaj se pokvari, ko tunel stoji
Uspešno klicanje dokaže avtentikacijo in nič drugega. Preizkusite vir, zaradi katerega naloga obstaja, z njegovim protokolom in kratkim časovnim omejitvom, in v sporočilu o napaki poimenujte fazo. Profili, potrdila in shranjene poverilnice, vidne na vašem namizju, so lahko za sejo storitve nevidne, zato nalogo enkrat zaženite pod lastnim računom načrtovalca, preden ji zaupate.
Omejite ponovne poskuse. Zanka, ki ponavlja zavrnjene poverilnice, zaklepa račune, na poziv MFA pa brezglava naloga ne more odgovoriti brez zasnove registracije; skriptni ponovni poskusi proti toku SSO v brskalniku samo kurijo poskuse. Prednost dajte VPN bremenu, dostavljenemu prek MDM, ali konfiguracijskemu profilu za floto, kjer življenjski cikel poverilnic upravlja platforma, skripte pa obdržite za odjemalce, ki jih tako ni mogoče upravljati.
Zabeležite izhodno kodo in prvi vir, ki odpove, ne pa dejstva, da se je skript izvedel. Prav ta ena vrstica spremeni opozorilo načrtovalca v diagnozo v petih minutah.