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 exposesWhat to scriptWhat still bites
OS-native connection entryrasdial, scutil --nc, nmcliTunnel is up before DNS and routes settle
Vendor CLI reading stdinCLI wrapped by the scheduler, secret from the credential storePrompt text changes between releases
GUI onlyPinned version plus a state assertionLocale 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 Office

Ti 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.com

FortiClient 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.

Sorodni članki