Automatiser VPN-innlogging når klienten ikke har API eller CLI
Velg skriptveien etter hva klienten eksponerer: en profil som operativsystemet eier, en leverandør-CLI som leser en hemmelighet fra stdin, eller GUI-automatisering som siste utvei.
Tre spørsmål avgjør dette, og bare tre. Oppretter klienten en tilkoblingsoppføring i operativsystemet som overlever en omstart? Leverer den en kommandolinje som kan ta en hemmelighet fra noe annet enn argumentlisten sin? Tvinger identitetskravet en person til å svare på en nettleserforespørsel? Svar i den rekkefølgen, og valget slutter å være en smakssak, fordi en planlagt jobb bare kan være så hodeløs som det svakeste av de tre svarene tillater.
Tilpass klienten til de tre skriptbare lagene
En innebygd OS-profil, en leverandør-CLI, en klient med bare GUI og en klient med nettleser-SSO trenger fire ulike tilnærminger. De to første overlever ubemannede omstarter, og ubemannede omstarter er hele poenget. De to andre trenger en designbeslutning før de trenger et 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 |
Vei én: operativsystemet eier allerede profilen
Dette er den billigste veien og den de fleste overser. På Windows kobler rasdial "Office" til, og rasdial "Office" /disconnect lukker den; rasphone -d "Office" styrer samme oppføring gjennom oppringingsgrensesnittet. macOS lister lagrede tjenester med scutil --nc list og starter én med scutil --nc start. Linux gir jobben til NetworkManager.
rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show OfficeDisse grensesnittene kjenner bare profiler som OS eier, så de kan ikke styre en vilkårlig tredjepartsklient. Når profilen mangler, opprett den én gang og la skriptet kontrollere den i stedet for å gjenskape den ved hver kjøring. Gjør skriptet idempotent: les gjeldende tilstand, koble bare til når det er frakoblet, og test deretter det private navnet jobben faktisk trenger.
Vei to: leverandøren leverer en kommandolinje
Noen klienter eksponerer nok kommandolinje til å kunne pakkes inn: Cisco AnyConnect har i årevis hatt en hjelper kun for tilkobling, og OpenConnect snakker AnyConnect-, GlobalProtect- og Pulse-protokollene fra én binærfil. Kravet som betyr noe er ikke flagglisten, men hvor hemmeligheten kommer fra, fordi et passord i argumentlisten kan leses av alle som kan liste prosesser.
printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
--user "$VPN_USER" --passwd-on-stdin vpn.example.comFortiClient og enkelte GlobalProtect-bygg har ingen støttet CLI i det hele tatt, og en fellesskapsklient eller en leverandørlisensiert erstatning er en innkjøpsbeslutning, ikke en omvei. I CI gir du tjenestekontoen rettigheter til nettopp den binærfilen og ikke til et skall, slik at et injisert argument ikke kan bli en root-kommando.
Vei tre: GUI-automatisering, og hvorfor den kommer sist
Når den offisielle klienten ikke har noe grensesnitt, klikker skript på knapper gjennom vindusmeldinger eller SendKeys. Det er versjons- og språkømfintlig, det kan etterlate en halvt tilkoblet økt, og det feiler stille når en dialog dukker opp på feil språk. Hvis du velger denne veien, fest klientversjonen, bekreft den resulterende tilkoblingstilstanden etterpå, og hold en dokumentert manuell reserveløsning ved siden av skriptet.
Den samme forsiktigheten gjelder for å koble fra en klient med makt ved å drepe prosessen. Tunnelen kan overleve prosessen, eller en overvåker kan starte den på nytt, så drep-og-restart er heller ikke en pålitelig nullstilling.
Hva som ryker etter at tunnelen er oppe
En vellykket oppringing beviser autentisering og ingenting annet. Test ressursen jobben finnes for å nå, med sin egen protokoll og en kort tidsavbrudd, og navngi steget i feilmeldingen. Profiler, sertifikater og lagrede påloggingsdata som er synlige på skrivebordet ditt, kan være usynlige for tjenesteøkten, så kjør jobben én gang under planleggerens egen konto før du stoler på den.
Begrens gjenforsøkene. En løkke som gjentar avviste påloggingsdata, låser kontoer, og en MFA-forespørsel kan en hodeløs jobb ikke svare på uten en registreringsdesign; skriptede gjenforsøk mot en nettleser-SSO-flyt brenner bare forsøk. Foretrekk en VPN-nyttelast levert via MDM eller en konfigurasjonsprofil for en flåte, der plattformen eier livssyklusen til påloggingsdataene, og behold skript for klientene som ikke kan styres slik.
Logg utgangskoden og den første ressursen som feiler, ikke at skriptet kjørte. Den ene linjen er det som gjør en planleggervarsel til en fem minutters diagnose.