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 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

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 Office

Tato 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.com

FortiClient 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.

Související články