Tre frågor avgör detta, och bara tre. Skapar klienten en anslutningspost i operativsystemet som överlever en omstart? Levererar den en kommandorad som kan hämta en hemlighet från något annat än sin argumentlista? Tvingar dess identitetskrav en människa att svara på en webbläsarprompt? Svara i den ordningen och valet slutar vara en smaksak, eftersom ett schemalagt jobb bara kan vara så huvudlöst som det svagaste av de tre svaren tillåter.

Matcha klienten mot de tre skriptbara lagren

En inbyggd OS-profil, ett leverantörs-CLI, en klient med bara GUI och en klient med webbläsar-SSO kräver fyra olika angreppssätt. De två första överlever obevakade omstarter, och obevakade omstarter är hela poängen. De andra två kräver ett designbeslut innan de kräver ett 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

Väg ett: operativsystemet äger redan profilen

Detta är den billigaste vägen och den som de flesta förbiser. I Windows ansluter rasdial "Office" och rasdial "Office" /disconnect stänger den; rasphone -d "Office" styr samma post genom uppringningsgränssnittet. macOS listar sparade tjänster med scutil --nc list och startar en med scutil --nc start. Linux ger jobbet till NetworkManager.

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

Dessa gränssnitt känner bara till profiler som OS äger, så de kan inte styra en godtycklig tredjepartsklient. När profilen saknas, skapa den en gång och låt skriptet kontrollera den i stället för att återskapa den vid varje körning. Gör skriptet idempotent: läs nuvarande tillstånd, anslut bara när det är frånkopplat och testa sedan det privata namn som jobbet faktiskt behöver.

Väg två: leverantören levererar en kommandorad

Vissa klienter exponerar tillräckligt mycket kommandorad för att kunna packas in: Cisco AnyConnect har i åratal haft en hjälpare enbart för anslutning, och OpenConnect talar AnyConnect-, GlobalProtect- och Pulse-protokollen från en enda binär. Kravet som betyder något är inte flagglistan utan var hemligheten kommer ifrån, eftersom ett lösenord i argumentlistan kan läsas av alla som kan lista processer.

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

FortiClient och vissa GlobalProtect-byggen har ingen CLI som stöds alls, och en communityklient eller en leverantörslicensierad ersättning är ett inköpsbeslut, inte en kringgång. I CI ger du tjänstekontot rättigheter till just den binären och inte till ett skal, så att ett injicerat argument inte kan bli ett root-kommando.

Väg tre: GUI-automatisering, och varför den kommer sist

När den officiella klienten saknar gränssnitt klickar skript på knappar via fönstermeddelanden eller SendKeys. Det är känsligt för version och språk, det kan lämna en halvansluten session, och det misslyckas tyst när en dialog dyker upp på fel språk. Om du väljer denna väg, fäst klientversionen, verifiera den resulterande anslutningsstatusen efteråt och håll en dokumenterad manuell reservlösning bredvid skriptet.

Samma försiktighet gäller för att tvångskoppla från en klient genom att döda dess process. Tunneln kan överleva processen, eller en övervakare kan starta om den, så döda-och-start-om är inte heller en pålitlig återställning.

Vad som går sönder när tunneln är uppe

En lyckad uppringning bevisar autentisering och inget annat. Testa resursen som jobbet finns för att nå, med sitt eget protokoll och en kort tidsgräns, och namnge steget i felmeddelandet. Profiler, certifikat och sparade inloggningsuppgifter som syns på skrivbordet kan vara osynliga för tjänstesessionen, så kör jobbet en gång under schemaläggarens eget konto innan du litar på det.

Begränsa återförsöken. En loop som upprepar avvisade inloggningsuppgifter låser konton, och en MFA-prompt kan ett huvudlöst jobb inte svara på utan en registreringsdesign; skriptade återförsök mot ett webbläsar-SSO-flöde bränner bara försök. Föredra en VPN-nyttolast som levereras via MDM eller en konfigurationsprofil för en flotta, där plattformen äger livscykeln för inloggningsuppgifterna, och behåll skript för de klienter som inte kan hanteras så.

Logga slutkoden och den första resurs som misslyckas, inte att skriptet kördes. Den enda raden är det som gör en schemaläggarvarning till en diagnos på fem minuter.

Relaterade artiklar