Три питања то одлучују, и само три. Да ли клијент ствара унос везе у оперативном систему који преживљава рестарт? Да ли испоручује командну линију која може узети тајну са нечег другог осим свог списка аргумената? Да ли његов захтев за идентитетом приморава човека да одговори на упит у прегледачу? Одговорите тим редом и избор престаје да буде ствар укуса, јер заказани посао може бити само онолико безглав колико то најслабији од три одговора допушта.

Ускладите клијент са три слоја која се могу скриптовати

Изворни профил ОС-а, CLI добављача, клијент само са GUI-јем и клијент са прегледачким SSO-ом траже четири различита приступа. Прва два преживљавају рестарте без надзора, а рестарт без надзора је цела поента. Друга два траже дизајнерску одлуку пре него скрипту.

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

Пут први: профил већ поседује оперативни систем

То је најјефтинији пут и онај који већина превиди. На Windows-у се rasdial "Office" повезује, а rasdial "Office" /disconnect затвара везу; rasphone -d "Office" води исти унос кроз бирачки интерфејс. macOS наводи сачуване услуге са scutil --nc list и покреће једну са scutil --nc start. Linux предаје посао NetworkManager-у.

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

Ови интерфејси познају само профиле које поседује ОС, па не могу водити произвољног клијента треће стране. Када профил недостаје, створите га једном и пустите скрипту да га провери уместо да га изнова ствара при сваком покретању. Учините скрипту идемпотентном: прочитајте тренутно стање, повежите се само када је веза прекинута, а затим тестирајте приватно име које посао заиста треба.

Пут други: добављач испоручује командну линију

Неки клијенти излажу довољно командне линије да се могу обавити: Cisco AnyConnect годинама има помоћника само за повезивање, а OpenConnect говори AnyConnect, GlobalProtect и Pulse протоколе из једне бинарне датотеке. Захтев који је важан није списак заставица него одакле тајна долази, јер лозинку на списку аргумената може прочитати свако ко може излистати процесе.

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

FortiClient и неке градње GlobalProtect-а уопште немају подржан CLI, а заједнички клијент или замена лиценцирана од добављача је одлука о набавци, не заобилазно решење. У CI-ју дајте сервисном рачуну права на тачно ту бинарну датотеку, а не на љуску, да уметнути аргумент не може постати root наредба.

Пут трећи: GUI аутоматизација и зашто је последња

Када службени клијент нема интерфејс, скрипте кликћу дугмад кроз поруке прозора или SendKeys. То је крхко на верзију и језик, може оставити напола повезану сесију и тихо затаји када се дијалог појави на погрешном језику. Ако идете тим путем, прикујте верзију клијента, затим проверите резултујуће стање везе и држите ручну резерву документовану уз скрипту.

Исто важи за присилно прекидање клијента убијањем његовог процеса. Тунел може надживети процес, или га надзорник може поново покренути, па ни убиј-па-поново-покрени није поуздан ресет.

Шта се квари након што тунел оживи

Успешно бирање доказује аутентификацију и ништа друго. Тестирајте ресурс због којег посао постоји, са његовим протоколом и кратким временским ограничењем, и именујте фазу у поруци о грешци. Профили, сертификати и сачувани акредитиви видљиви на вашем радном столу могу бити невидљиви сервисној сесији, па покрените посао једном под сопственим рачуном планера пре него му верујете.

Ограничите поновне покушаје. Петља која понавља одбијени акредитив закључава рачуне, а на MFA упит безглави посао не може одговорити без дизајна уписа; скриптовани поновни покушаји према прегледачком SSO току само троше покушаје. Преферирајте VPN корисни терет достављен кроз MDM или конфигурацијски профил за флоту, где платформа поседује животни циклус акредитива, и држите скрипте за клијенте којима се тако не може управљати.

Запишите излазни код и први ресурс који затаји, а не чињеницу да је скрипта радила. Тај један ред претвара упозорење планера у дијагнозу за пет минута.

Повезани чланци