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

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 Office

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

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

Seotud artiklid