Három kérdés dönti el, és csak három. Létrehoz-e a kliens olyan kapcsolatbejegyzést az operációs rendszerben, amely túléli az újraindítást? Ad-e olyan parancssort, amely a saját argumentumlistáján kívülről is tud titkot venni? Identitáskövetelménye embert kényszerít-e böngészőbeli kérés megválaszolására? Válaszoljon ebben a sorrendben, és a választás megszűnik ízlés kérdése lenni, mert egy ütemezett feladat csak annyira lehet fej nélküli, amennyire a három válasz közül a leggyengébb engedi.

Párosítsa a klienst a három szkriptelhető réteggel

A natív OS-profil, a gyártói CLI, a csak GUI-s kliens és a böngésző-SSO-s kliens négy különböző megközelítést igényel. Az első kettő túléli a felügyelet nélküli újraindításokat, és a felügyelet nélküli újraindítás a lényeg. A másik kettőnek a szkript előtt tervezési döntésre van szüksége.

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

Első út: a profilt már az operációs rendszer birtokolja

Ez a legolcsóbb út, és ezt a legtöbb ember elnézi. Windowson a rasdial "Office" csatlakozik, a rasdial "Office" /disconnect pedig lezárja; a rasphone -d "Office" ugyanazt a bejegyzést vezérli a tárcsázó felületen keresztül. A macOS a scutil --nc list paranccsal listázza a mentett szolgáltatásokat, és a scutil --nc start paranccsal indít egyet. A Linux a NetworkManagernek adja a feladatot.

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

Ezek a felületek csak az operációs rendszer tulajdonában lévő profilokat ismerik, ezért nem tudnak tetszőleges harmadik féltől származó klienst vezérelni. Ha a profil hiányzik, hozza létre egyszer, és hagyja, hogy a szkript ellenőrizze, ahelyett hogy minden futáskor újra létrehozná. Tegye a szkriptet idempotenssé: olvassa ki az aktuális állapotot, csak akkor csatlakozzon, ha megszakadt a kapcsolat, majd tesztelje a privát nevet, amelyre a feladatnak valóban szüksége van.

Második út: a gyártó parancssort ad

Néhány kliens elég parancssort tesz elérhetővé ahhoz, hogy becsomagolható legyen: a Cisco AnyConnectnek évekig volt csak csatlakozásra való segédje, az OpenConnect pedig egyetlen binárisból beszéli az AnyConnect, a GlobalProtect és a Pulse protokollt. A fontos követelmény nem a kapcsolók listája, hanem hogy honnan jön a titok, mert az argumentumlistában lévő jelszót bárki olvashatja, aki listázni tudja a folyamatokat.

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

A FortiClientnek és néhány GlobalProtect-buildnek egyáltalán nincs támogatott CLI-je, a közösségi kliens vagy a gyártó által licencelt helyettesítő pedig beszerzési döntés, nem megkerülő megoldás. CI-ben a szolgáltatásfióknak pont arra a binárisra adjon jogot, ne egy shellre, hogy egy befecskendezett argumentum ne válhasson root parancsá.

Harmadik út: GUI-automatizálás, és miért utolsó

Ha a hivatalos kliensnek nincs felülete, a szkriptek ablaküzenetekkel vagy SendKeys-szel kattintanak gombokra. Ez verzió- és nyelvérzékeny, félkész kapcsolatot hagyhat maga után, és csendben elbukik, ha egy párbeszédablak rossz nyelven jelenik meg. Ha ezt az utat választja, rögzítse a kliens verzióját, utána ellenőrizze a létrejött kapcsolat állapotát, és tartson dokumentált kézi tartalékot a szkript mellett.

Ugyanez az óvatosság érvényes a kliens erőszakos leválasztására a folyamatának megölésével. Az alagút túlélheti a folyamatot, vagy egy felügyelő újraindíthatja, ezért a megöl-és-újraindít sem megbízható visszaállítás.

Mi törik el, miután az alagút felállt

A sikeres tárcsázás csak a hitelesítést bizonyítja, semmi mást. Tesztelje azt az erőforrást, amelyért a feladat létezik, a saját protokolljával és rövid időkorláttal, és nevezze meg a szakaszt a hibaüzenetben. Az asztalán látható profilok, tanúsítványok és tárolt hitelesítő adatok láthatatlanok lehetnek a szolgáltatásmunkamenet számára, ezért futtassa a feladatot egyszer az ütemező saját fiókja alatt, mielőtt megbízik benne.

Korlátozza az újrapróbálkozásokat. Az elutasított hitelesítő adatokat ismétlő hurok zárolja a fiókokat, az MFA-kérésre pedig fej nélküli feladat nem tud válaszolni regisztrációs terv nélkül; a böngészős SSO-folyamat elleni szkriptelt újrapróbálkozások csak elégetik a kísérleteket. Részesítse előnyben az MDM-en keresztül szállított VPN-hasznos terhet vagy konfigurációs profilt egy flotta számára, ahol a platform birtokolja a hitelesítő adatok életciklusát, és tartsa meg a szkripteket azoknak a klienseknek, amelyek így nem kezelhetők.

Naplózza a kilépési kódot és az első hibát adó erőforrást, ne azt a tényt, hogy a szkript lefutott. Az az egy sor az, amely az ütemező riasztását ötperces diagnózissá alakítja.

Kapcsolódó cikkek