Tre spørgsmål afgør dette, og kun tre. Opretter klienten en forbindelsespost i styresystemet, som overlever en genstart? Leverer den en kommandolinje, der kan tage en hemmelighed fra noget andet end sin argumentliste? Tvinger dens identitetskrav et menneske til at svare på en browserprompt? Svar i den rækkefølge, og valget holder op med at være et spørgsmål om smag, fordi et planlagt job kun kan være så hovedløst, som det svageste af de tre svar tillader.

Match klienten til de tre scriptbare lag

En native OS-profil, en leverandør-CLI, en klient kun med GUI og en klient med browser-SSO kræver fire forskellige tilgange. De to første overlever ubemandede genstarter, og ubemandede genstarter er hele pointen. De to andre kræver en designbeslutning, før de kræver et script.

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

Vej et: styresystemet ejer allerede profilen

Det er den billigste vej og den, de fleste overser. På Windows forbinder rasdial "Office", og rasdial "Office" /disconnect lukker den; rasphone -d "Office" styrer samme post gennem opkaldsgrænsefladen. macOS viser gemte tjenester med scutil --nc list og starter en med scutil --nc start. Linux giver opgaven til NetworkManager.

rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show Office

Disse grænseflader kender kun profiler, som styresystemet ejer, så de kan ikke styre en vilkårlig tredjepartsklient. Når profilen mangler, så opret den én gang, og lad scriptet kontrollere den i stedet for at genskabe den ved hver kørsel. Gør scriptet idempotent: læs den aktuelle tilstand, forbind kun når der er afbrudt, og test derefter det private navn, som jobbet faktisk har brug for.

Vej to: leverandøren leverer en kommandolinje

Nogle klienter udstiller nok kommandolinje til at kunne indpakkes: Cisco AnyConnect har i årevis haft en hjælper kun til forbindelse, og OpenConnect taler AnyConnect-, GlobalProtect- og Pulse-protokoller fra én binær fil. Kravet, der betyder noget, er ikke flaglisten, men hvor hemmeligheden kommer fra, fordi en adgangskode i argumentlisten kan læses af enhver, der kan liste processer.

printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
  --user "$VPN_USER" --passwd-on-stdin vpn.example.com

FortiClient og nogle GlobalProtect-builds har slet ingen understøttet CLI, og en fællesskabsklient eller en leverandørlicenseret erstatning er en indkøbsbeslutning, ikke en omvej. I CI skal du give tjenestekontoen rettigheder til netop den binære fil og ikke til en shell, så et injiceret argument ikke kan blive en root-kommando.

Vej tre: GUI-automatisering, og hvorfor den er sidst

Når den officielle klient ikke har nogen grænseflade, klikker scripts på knapper gennem vinduesbeskeder eller SendKeys. Det er skrøbeligt over for version og sprog, det kan efterlade en halvt forbundet session, og det fejler lydløst, når en dialog dukker op på det forkerte sprog. Hvis du vælger denne vej, så fastlås klientversionen, bekræft den resulterende forbindelsestilstand bagefter, og hold en dokumenteret manuel fallback ved siden af scriptet.

Samme forsigtighed gælder ved at afbryde en klient med magt ved at dræbe dens proces. Tunnelen kan overleve processen, eller en supervisor kan genstarte den, så kill-og-genstart er heller ikke en pålidelig nulstilling.

Hvad der brækker, efter tunnelen er oppe

En vellykket opkobling beviser autentificering og intet andet. Test den ressource, som jobbet findes for at nå, med sin egen protokol og en kort timeout, og navngiv trinnet i fejlmeddelelsen. Profiler, certifikater og gemte legitimationsoplysninger, der er synlige på dit skrivebord, kan være usynlige for tjenestesessionen, så kør jobbet én gang under planlæggerens egen konto, før du stoler på det.

Begræns gentagelserne. En løkke, der gentager en afvist legitimationsoplysning, låser konti, og en MFA-prompt kan et hovedløst job ikke besvare uden et tilmeldingsdesign; scriptede gentagelser mod et browser-SSO-flow brænder bare forsøg. Foretræk en VPN-nyttelast leveret via MDM eller en konfigurationsprofil til en flåde, hvor platformen ejer legitimationslivscyklussen, og behold scripts til de klienter, der ikke kan styres sådan.

Log exitkoden og den første ressource, der fejler, ikke at scriptet kørte. Den ene linje er det, der gør en planlæggeradvarsel til en fem minutters diagnose.

Relaterede artikler