Automatiseeri VPN-i sisselogimine, kui kliendil pole API-t ega CLI-t
Vali skripti tee selle järgi, mida klient pakub: operatsioonisüsteemi omanduses olev profiil, tarnija CLI, mis loeb saladust stdin-ist, või viimase abinõuna GUI automatiseerimine.
Seda otsustavad kolm küsimust ja ainult kolm. Kas klient loob operatsioonisüsteemi ühenduse kirje, mis jääb püsti ka taaskäivituse järel? Kas ta pakub käsurea, mis suudab saladust võtta millestki muust kui oma argumentide loendist? Kas tema identiteedinõue sunnib inimest vastama brauseri viipale? Vasta selles järjekorras ja valik lakkab olemast maitse küsimus, sest ajastatud töö saab olla ainult nii peata, kui lubab kolmest vastusest nõrgim.
Sobita klient kolme skriptitava kihiga
Natiivne OS-i profiil, tarnija CLI, ainult GUI-ga klient ja brauseri SSO-ga klient vajavad nelja erinevat lähenemist. Kaks esimest peavad vastu järelevalveta taaskäivitustele ja järelevalveta taaskäivitused ongi kogu mõte. Ülejäänud kaks vajavad disainiotsust enne, kui vajavad skripti.
| 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 |
Tee esimene: profiil on juba operatsioonisüsteemi omandis
See on odavaim tee ja see, mille enamik inimesi jätab märkamata. Windowsis ühendub rasdial "Office" ja sulgeb rasdial "Office" /disconnect; rasphone -d "Office" juhib sama kirjet valimisliidese kaudu. macOS loetleb salvestatud teenused käsuga scutil --nc list ja käivitab ühe käsuga scutil --nc start. Linux annab töö NetworkManagerile.
rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show OfficeNeed liidesed tunnevad ainult OS-i omandis olevaid profiile, seega ei suuda nad juhtida suvalist kolmanda osapoole klienti. Kui profiil puudub, loo see üks kord ja lase skriptil seda kontrollida, selle asemel et seda igal käivitusel uuesti luua. Tee skript idempotentseks: loe praegust olekut, ühenda ainult siis, kui ühendus on katkenud, ja seejärel testi privaatset nime, mida töö tegelikult vajab.
Tee teine: tarnija pakub käsurea
Mõned kliendid pakuvad piisavalt käsurida, et neid saaks mähkida: Cisco AnyConnectil on aastaid olnud ainult ühendamiseks mõeldud abiline ja OpenConnect räägib AnyConnecti, GlobalProtecti ja Pulse protokolle ühest binaarfailist. Oluline nõue pole lippude loend, vaid see, kust saladus tuleb, sest argumentide loendis olevat parooli saab lugeda igaüks, kes suudab protsesse loetleda.
printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
--user "$VPN_USER" --passwd-on-stdin vpn.example.comFortiClientil ja mõnel GlobalProtecti buildil puudub täiesti toetatud CLI ning kogukonnaklient või tarnija litsentseeritud asendus on hankimise otsus, mitte mööramine. CI-s anna teenusekontole õigused just sellele binaarfailile, mitte shellile, et süstitud argument ei saaks muutuda root-käsukst.
Tee kolmas: GUI automatiseerimine ja miks see on viimane
Kui ametlikul kliendil pole liidest, klõpsavad skriptid nuppe aknasõnumite või SendKeysi kaudu. See on versiooni- ja keeletundlik, võib jätta pooleldi ühendatud sessiooni ja ebaõnnestub vaikselt, kui dialoog ilmub vales keeles. Kui selle tee valid, kinnita kliendi versioon, kontrolli seejärel saadud ühenduse olekut ja hoia skripti kõrval dokumenteeritud käsitsi varuplaan.
Sama ettevaatlikkus kehtib ka kliendi jõulise lahtiühendamise kohta selle protsessi tapmisega. Tunnel võib protsessist kauem elada või järelevalvaja selle taaskäivitada, seega tapa-ja-taaskäivita pole ka usaldusväärne lähtestamine.
Mis läheb katki pärast tunneli püstipanekut
Edukas valimine tõestab autentimist ja mitte midagi muud. Testi ressurssi, mille jaoks töö olemas on, selle enda protokolli ja lühikese ajalimiidiga, ja nimeta rikketeates etapp. Sinu töölaual nähtavad profiilid, sertifikaadid ja salvestatud mandaadid võivad olla teenuse sessioonile nähtamatud, seega käivita töö üks kord planeerija enda konto all, enne kui sellele usaldad.
Piira kordusi. Silmus, mis kordab tagasilükatud mandaati, lukustab kontod, ja MFA-viipale ei saa peata töö ilma registreerimise disainita vastata; brauseri SSO voo vastu suunatud skriptitud kordused lihtsalt põletavad katseid. Eelista MDM-i kaudu edastatavat VPN-i kasulast või konfiguratsiooniprofiili parvele, kus platvorm omab mandaatide elutsüklit, ja hoia skriptid klientidele, mida nii hallata ei saa.
Logi väljumiskoodi ja esimest ebaõnnestuvat ressurssi, mitte fakti, et skript jooksis. Just see üks rida muudab planeerija hoiatuse viie minuti diagnoosiks.