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

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

Изворен профил на ОС, 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 или конфигурациски профил за флота, каде што платформата го поседува животниот циклус на акредитивите, и чувајте скрипти за клиентите што не можат така да се управуваат.

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

Поврзани статии