A VPN-bejelentkezés automatizálása, ha a kliensnek nincs API-ja vagy CLI-je
A szkript útvonalát aszerint válassza, mit tesz elérhetővé a kliens: az operációs rendszer tulajdonában lévő profil, stdin-ről titkot olvasó gyártói CLI, vagy végső esetben GUI-automatizálás.
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 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 |
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 OfficeEzek 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.comA 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.