Automatiseer VPN-aanmelding wanneer die kliënt geen API of CLI het
Kies die skrip-pad volgens wat die kliënt blootstel: 'n profiel wat die bedryfstelsel besit, 'n verskaffer-CLI wat 'n geheim van stdin lees, of GUI-outomatisering as laaste uitweg.
Drie vrae besluit dit, en net drie. Skep die kliënt 'n verbindingsinskrywing in die bedryfstelsel wat 'n herlaai oorleef? Verskaf dit 'n opdragreël wat 'n geheim van iets anders as sy argumentlys kan neem? Dwing sy identiteitsvereiste 'n mens om 'n browser-versoek te beantwoord? Antwoord dit in daardie volgorde, dan is die keuse nie meer 'n kwessie van smaak nie, want 'n geskeduleerde taak kan net so koploos wees as wat die swakste van die drie antwoorde toelaat.
Pas die kliënt by die drie skripbare lae aan
'n Inheemse bedryfstelselprofiel, 'n verskaffer-CLI, 'n slegs-GUI-kliënt en 'n browser-SSO-kliënt het vier verskillende benaderings nodig. Die eerste twee oorleef onbewaakte herlaai, en onbewaakte herlaai is die hele punt. Die ander twee het 'n ontwerpbesluit nodig voordat hulle 'n skrip nodig het.
| 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 |
Pad een: die bedryfstelsel besit reeds die profiel
Dit is die goedkoopste pad en die een wat die meeste mense oor die hoof sien. Op Windows verbind rasdial "Office" en sluit rasdial "Office" /disconnect dit; rasphone -d "Office" dryf dieselfde inskrywing deur die inbel-koppelvlak. macOS lys gestoorde dienste met scutil --nc list en begin een met scutil --nc start. Linux gee die werk aan NetworkManager.
rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show OfficeHierdie koppelvlakke ken net profiele wat die bedryfstelsel besit, so hulle kan nie 'n willekeurige derdeparty-kliënt aandryf nie. Wanneer die profiel ontbreek, skep dit een keer en laat die skrip daarvoor kyk eerder as om dit by elke lopie te herskep. Maak die skrip idempotent: lees die huidige toestand, verbind net wanneer dit ontkoppel is, en toets dan die private naam wat die taak werklik nodig het.
Pad twee: die verskaffer lewer 'n opdragreël
Sommige kliënte stel genoeg van 'n opdragreël bloot om omhul te word: Cisco AnyConnect het jare lank 'n helper gehad wat net kan verbind, en OpenConnect praat AnyConnect-, GlobalProtect- en Pulse-protokolle uit een program. Die vereiste wat saak maak is nie die vlaglys nie, maar waar die geheim vandaan kom, want 'n wagwoord in die argumentlys is leesbaar vir enigiemand wat prosesse kan lys.
printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
--user "$VPN_USER" --passwd-on-stdin vpn.example.comFortiClient en sommige GlobalProtect-bouwe het glad geen ondersteunde CLI nie, en 'n gemeenskapskliënt of 'n deur die verskaffer gelisensieerde plaasvervanger is 'n verkrygingsbesluit, nie 'n oplossing nie. In CI gee die diensrekening regte op daardie presiese program en nie op 'n dop nie, sodat 'n ingevoegde argument nie 'n root-opdrag kan word nie.
Pad drie: GUI-outomatisering, en waarom dit laaste kom
Wanneer die amptelike kliënt geen koppelvlak het nie, klik skrips deur vensterboodskappe of SendKeys op knoppies. Dit is weergawe- en lokaalbroos, dit kan 'n halfverbinde sessie los, en dit misluk stil wanneer 'n dialoog in die verkeerde taal verskyn. As jy hierdie roete kies, pen die kliëntweergawe vas, bevestig die gevolglike verbindingstoestand daarna, en hou 'n handmatige terugval gedokumenteer langs die skrip.
Dieselfde versigtigheid geld om 'n kliënt met geweld te ontkoppel deur sy proses te dood. Die tonnel kan die proses oorleef, of 'n toesigprogram kan dit herbegin, so dood-en-herbegin is ook nie 'n betroubare herstel nie.
Wat breek nadat die tonnel op is
'n Suksesvolle inbel bewys net verifikasie en niks anders nie. Toets die hulpbron waarvoor die taak bestaan, met sy eie protokol en 'n kort tydperk, en noem die stadium in die foutboodskap. Profiele, sertifikate en gestoorde geloofsbriewe wat op jou lessenaar sigbaar is, kan onsigbaar wees vir die dienssessie, so laat die taak een keer onder die skeduleerder se eie rekening loop voordat jy dit vertrou.
Beperk die herprobeerslae. 'n Lus wat 'n verwerpte geloofsbrief herhaal, sluit rekeninge, en 'n MFA-versoek kan nie deur 'n kopclose taak beantwoord word sonder 'n inskrywingsontwerp nie; geskripte herprobeerslae teen 'n browser-SSO-vloei mors net pogings. Verkies 'n VPN-lading wat deur MDM gelewer word of 'n konfigurasieprofiel vir 'n vloot, waar die platform die geloofsbrieflewensiklus besit, en hou skrips vir die kliënte wat nie so bestuur kan word nie.
Teken die uitgangskode aan en die eerste hulpbron wat faal, nie die feit dat die skrip geloop het nie. Daardie enkele reël is wat 'n skeduleerder-waarskuwing in 'n vyfminuut-diagnose omskep.