Automatizujte přihlášení k VPN, když klient nemá API ani CLI
Vyberte cestu skriptu podle toho, co klient nabízí: profil vlastněný operačním systémem, CLI dodavatele, které čte tajemství ze stdin, nebo GUI automatizace jako poslední možnost.
Rozhodují to tři otázky, a jenom tři. Vytváří klient položku připojení v operačním systému, která přežije restart? Dodává příkazový řádek, který umí vzít tajemství z něčeho jiného než ze seznamu argumentů? Nutí jeho požadavek na identitu člověka odpovědět na výzvu v prohlížeči? Odpovězte v tomto pořadí a volba přestane být věcí vkusu, protože naplánovaná úloha může být jen tak bezobslužná, jak to nejslabší ze tří odpovědí dovolí.
Slaďte klienta se třemi skriptovatelnými vrstvami
Nativní profil OS, CLI dodavatele, klient jen s GUI a klient s prohlížečovým SSO potřebují čtyři různé přístupy. První dva přežijí restart bez dozoru a restart bez dozoru je celý smysl. Zbylé dva potřebují rozhodnutí o návrhu dřív než 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 |
Cesta první: profil už vlastní operační systém
To je nejlevnější cesta a ta, kterou většina lidí přehlédne. Ve Windows se rasdial "Office" připojí a rasdial "Office" /disconnect ho zavře; rasphone -d "Office" vede stejnou položku přes rozhraní vytáčeného připojení. macOS vypíše uložené služby pomocí scutil --nc list a jednu spustí pomocí scutil --nc start. Linux předá práci NetworkManageru.
rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show OfficeTato rozhraní znají jen profily vlastněné OS, takže neumí ovládat libovolného klienta třetí strany. Když profil chybí, vytvořte ho jednou a nechte skript, ať ho zkontroluje, místo aby ho znovu vytvářel při každém běhu. Udělejte skript idempotentní: přečtěte aktuální stav, připojujte se jen při odpojení a potom otestujte soukromé jméno, které úloha skutečně potřebuje.
Cesta druhá: dodavatel dodává příkazový řádek
Někteří klienti nabízejí dost příkazového řádku na to, aby se dali obalit: Cisco AnyConnect měl léta pomocníka jen pro připojení a OpenConnect mluví protokoly AnyConnect, GlobalProtect a Pulse z jednoho binárního souboru. Důležitý požadavek není seznam přepínačů, ale odkud tajemství pochází, protože heslo v seznamu argumentů přečte každý, kdo umí vypsat procesy.
printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
--user "$VPN_USER" --passwd-on-stdin vpn.example.comFortiClient a některá sestavení GlobalProtect nemají vůbec podporované CLI a komunitní klient nebo náhrada licencovaná dodavatelem je rozhodnutí o nákupu, ne obejití. V CI dejte servisnímu účtu práva na přesně tento binární soubor, ne na shell, aby se vložený argument nemohl stát příkazem roota.
Cesta třetí: GUI automatizace a proč je poslední
Když oficiální klient nemá rozhraní, skripty klikají na tlačítka přes zprávy oken nebo SendKeys. To je křehké vůči verzi a jazyku, může zanechat napůl připojenou relaci a tiše selže, když se dialog objeví ve špatném jazyce. Pokud touto cestou jdete, zafixujte verzi klienta, potom ověřte výsledný stav připojení a mějte u skriptu zdokumentovanou ruční zálohu.
Stejná opatrnost platí pro násilné odpojení klienta zabitím jeho procesu. Tunel může proces přežít nebo ho správce restartuje, takže zabít a restartovat také není spolehlivý reset.
Co se rozbije po navázání tunelu
Úspěšné vytáčení dokazuje jen autentizaci a nic jiného. Otestujte prostředek, kvůli kterému úloha existuje, jeho vlastním protokolem a krátkým časovým limitem, a ve zprávě o selhání pojmenujte fázi. Profily, certifikáty a uložené přihlašovací údaje viditelné na vaší ploše mohou být pro relaci služby neviditelné, proto úlohu jednou spusťte pod vlastním účtem plánovače, než jí uvěříte.
Omezte opakované pokusy. Smyčka, která opakuje odmítnuté přihlašovací údaje, zamyká účty, a na výzvu MFA nemůže bezobslužná úloha odpovědět bez návrhu registrace; skriptované opakování proti prohlížečovému SSO toku jen spálí pokusy. Dejte přednost VPN datové zátěži doručované přes MDM nebo konfiguračnímu profilu pro flotilu, kde životní cyklus údajů vlastní platforma, a skripty si nechte pro klienty, které takto spravovat nelze.
Zaznamenejte návratový kód a první selhávající prostředek, ne fakt, že skript běžel. Právě ten jediný řádek mění upozornění plánovače v diagnózu za pět minut.