Automatizējiet VPN pieteikšanos, kad klientam nav API vai CLI
Izvēlieties skripta ceļu pēc tā, ko klients piedāvā: operētājsistēmas īpašumā esošs profils, piegādātāja CLI, kas lasa noslēpumu no stdin, vai GUI automatizācija kā pēdējais līdzeklis.
To izšķir trīs jautājumi, un tikai trīs. Vai klients operētājsistēmā izveido savienojuma ierakstu, kas pārdzīvo pārstartēšanu? Vai tas piedāvā komandrindu, kas spēj paņemt noslēpumu nevis no savu argumentu saraksta? Vai tā identitātes prasība liek cilvēkam atbildēt uz pārlūka uzvedni? Atbildiet šādā secībā, un izvēle pārstāj būt gaumes jautājums, jo plānots darbs var būt tikai tik bezgalvains, cik pieļauj vājākā no trim atbildēm.
Saskaņojiet klientu ar trim skriptojamām kārtām
Vietējais OS profils, piegādātāja CLI, klients tikai ar GUI un klients ar pārlūka SSO prasa četras dažādas pieejas. Pirmie divi pārdzīvo uzraudzības neapsekotu pārstartēšanu, un tieši neuzraudzīta pārstartēšana ir visa būtība. Pārējiem diviem pirms skripta vajadzīgs dizaina lēmums.
| 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 |
Pirmais ceļš: profilu jau pārvalda operētājsistēma
Šis ir lētākais ceļš un tas, ko vairums palaiž garām. Windows rasdial "Office" izveido savienojumu, bet rasdial "Office" /disconnect to aizver; rasphone -d "Office" vada to pašu ierakstu caur zvanīšanas saskarni. macOS uzskaita saglabātos pakalpojumus ar scutil --nc list un sāk vienu ar scutil --nc start. Linux nodod darbu NetworkManager.
rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show OfficeŠīs saskarnes pazīst tikai OS īpašumā esošus profilus, tāpēc tās nevar vadīt patvaļīgu trešās puses klientu. Ja profila nav, izveidojiet to vienreiz un ļaujiet skriptam to pārbaudīt, nevis veidot no jauna katrā palaidē. Padariet skriptu idempotentu: nolasiet pašreizējo stāvokli, pieslēdzieties tikai tad, kad savienojums ir pārtraukts, un pēc tam pārbaudiet privāto nosaukumu, kas darbam patiešām vajadzīgs.
Otrais ceļš: piegādātājs nodrošina komandrindu
Daži klienti atklāj pietiekami daudz komandrindas, lai tos varētu ietīt: Cisco AnyConnect gadiem ilgi ir tikai savienošanās palīgs, un OpenConnect runā AnyConnect, GlobalProtect un Pulse protokolos no viena binārā faila. Svarīgā prasība nav karodziņu saraksts, bet tas, no kurienes nāk noslēpums, jo paroli argumentu sarakstā var nolasīt ikviens, kas spēj uzskaitīt procesus.
printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
--user "$VPN_USER" --passwd-on-stdin vpn.example.comFortiClient un dažām GlobalProtect būvēm vispār nav atbalstīta CLI, un kopienas klients vai piegādātāja licencēts aizstājējs ir iepirkuma lēmums, nevis apiešana. CI piešķiriet servisa kontam tiesības tieši uz šo bināro failu, nevis uz čaulu, lai ievadīts arguments nevarētu kļūt par root komandu.
Trešais ceļš: GUI automatizācija un kāpēc tā ir pēdējā
Kad oficiālajam klientam nav saskarnes, skripti klikšķina pogas, izmantojot loga ziņojumus vai SendKeys. Tas ir trausls pret versiju un valodu, var atstāt pusieslēgtu sesiju un klusi neizdodas, kad dialogs parādās nepareizā valodā. Ja izvēlaties šo ceļu, nofiksējiet klienta versiju, pēc tam pārbaudiet iegūto savienojuma stāvokli un turiet dokumentētu manuālu rezerves variantu līdzās skriptam.
Tāda pati piesardzība attiecas uz klienta piespiedu atvienošanu, nogalinot tā procesu. Tunelis var pārdzīvot procesu, vai uzraugs to var restartēt, tāpēc nogalināt-un-restartēt arī nav uzticama atiestatīšana.
Kas salūzt pēc tam, kad tunelis ir uzcēlies
Veiksmīga savienošanās pierāda autentifikāciju un neko citu. Pārbaudiet resursu, kura dēļ darbs pastāv, ar tā protokolu un īsu taimautu, un kļūdas ziņojumā nosauciet posmu. Profili, sertifikāti un saglabātie akreditācijas dati, kas redzami jūsu darbvirsmā, var būt neredzami servisa sesijai, tāpēc palaidiet darbu vienreiz zem paša plānotāja konta, pirms tam uzticaties.
Ierobežojiet atkārtojumus. Cikls, kas atkārto noraidītus akreditācijas datus, bloķē kontus, un uz MFA uzvedni bezgalvains darbs nevar atbildēt bez reģistrācijas dizaina; skriptēti atkārtojumi pret pārlūka SSO plūsmu vienkārši dedzina mēģinājumus. Dodiet priekšroku MDM piegādātai VPN kravai vai konfigurācijas profilam flotei, kur platforma pārvalda akreditācijas datu dzīves ciklu, un turiet skriptus tiem klientiem, kurus tā pārvaldīt nevar.
Reģistrējiet iziešanas kodu un pirmo neizdevušos resursu, nevis faktu, ka skripts darbojās. Tieši šī viena rinda pārvērš plānotāja brīdinājumu piecu minūšu diagnostikā.