I-automate ang pag-log in sa VPN kapag walang API o CLI ang client
Piliin ang landas ng script ayon sa ibinubunyag ng client: isang profile na pag-aari ng operating system, isang CLI ng vendor na nagbabasa ng lihim mula sa stdin, o GUI automation bilang huling paraan.
Tatlong tanong ang nagpapasya nito, at tatlo lamang. Gumagawa ba ang client ng entry ng koneksyon sa operating system na nananatili pagkatapos ng reboot? Nagbibigay ba ito ng command line na makakakuha ng lihim mula sa iba pa kaysa sa listahan ng argumento nito? Pinipilit ba ng pangangailangan nito sa pagkakakilanlan ang isang tao na sagutin ang prompt ng browser? Sagutin sa ganoong pagkakasunod-sunod at ang pagpili ay hindi na usapin ng panlasa, dahil ang naka-iskedyul na trabaho ay maaari lamang maging kasing walang ulo ng pinapayagan ng pinakamahinang sagot sa tatlo.
Itugma ang client sa tatlong layer na maaaring i-script
Ang native na profile ng OS, CLI ng vendor, client na GUI lamang at client na may SSO sa browser ay nangangailangan ng apat na magkakaibang paraan. Ang unang dalawa ay nakakaligtas sa mga reboot na walang nagmamatyag, at ang reboot na walang nagmamatyag ang buong punto. Ang dalawa pa ay nangangailangan ng desisyon sa disenyo bago mangailangan ng script.
| 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 |
Landas isa: pag-aari na ng operating system ang profile
Ito ang pinakamurang landas at ang madalas na hindi napapansin ng karamihan. Sa Windows, kumokonekta ang rasdial "Office" at isinasara ito ng rasdial "Office" /disconnect; pinapatakbo ng rasphone -d "Office" ang parehong entry sa pamamagitan ng dial-up interface. Naglilista ang macOS ng mga naka-save na serbisyo gamit ang scutil --nc list at nagsisimula ng isa gamit ang scutil --nc start. Ibinibigay ng Linux ang trabaho sa NetworkManager.
rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show OfficeAng mga interface na ito ay nakikilala lamang ang mga profile na pag-aari ng OS, kaya hindi nila mapapatakbo ang anumang third-party na client. Kapag wala ang profile, gawin ito nang isang beses at hayaang suriin ito ng script sa halip na muling gawin ito sa bawat pagtakbo. Gawing idempotent ang script: basahin ang kasalukuyang estado, kumonekta lamang kapag disconnected, pagkatapos ay subukan ang pribadong pangalan na talagang kailangan ng trabaho.
Landas dalawa: may command line ang vendor
May mga client na nagbubunyag ng sapat na command line upang mabalot: ang Cisco AnyConnect ay may helper na koneksyon lamang sa loob ng maraming taon, at ang OpenConnect ay nagsasalita ng AnyConnect, GlobalProtect at Pulse protocol mula sa isang binary. Ang mahalagang pangangailangan ay hindi ang listahan ng flag kundi kung saan galing ang lihim, dahil ang password sa listahan ng argumento ay mababasa ng kahit sino na makapaglilista ng mga proseso.
printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
--user "$VPN_USER" --passwd-on-stdin vpn.example.comAng FortiClient at ilang build ng GlobalProtect ay walang suportadong CLI, at ang community client o kapalit na lisensyado ng vendor ay desisyon sa pagbili, hindi paraan ng pag-iwas. Sa CI, bigyan ang service account ng karapatan sa mismong binary na iyon at hindi sa isang shell, upang ang na-inject na argumento ay hindi maging root command.
Landas tatlo: GUI automation, at bakit ito huli
Kapag walang interface ang opisyal na client, nagki-click ang mga script ng button sa pamamagitan ng window message o SendKeys. Marupok ito sa bersyon at wika, maaaring mag-iwan ng kalahating nakakonektang session, at tahimik na nabibigo kapag lumitaw ang dialog sa maling wika. Kung tatahakin mo ang landas na ito, i-pin ang bersyon ng client, i-verify pagkatapos ang resultang estado ng koneksyon, at panatilihin ang nakadokumentong manuwal na fallback sa tabi ng script.
Ang parehong pag-iingat ay tumutukoy sa sapilitang pag-disconnect ng client sa pamamagitan ng pagpatay sa proseso nito. Maaaring mabuhay ang tunnel nang mas matagal kaysa sa proseso, o maaaring i-restart ito ng supervisor, kaya ang patay-at-restart ay hindi rin maaasahang reset.
Ano ang nasisira pagkatapos na tumayo ang tunnel
Ang matagumpay na dial ay nagpapatunay lamang ng authentication at wala nang iba. Subukan ang resource na dahilan ng pag-iral ng trabaho, gamit ang sarili nitong protocol at maikling timeout, at pangalanan ang yugto sa mensahe ng kabiguan. Ang mga profile, sertipiko at naka-save na kredensyal na nakikita sa iyong desktop ay maaaring hindi nakikita ng session ng serbisyo, kaya patakbuhin ang trabaho nang isang beses sa ilalim ng sariling account ng scheduler bago ito pagkatiwalaan.
Limitahan ang mga pagtatangka muli. Ang loop na umuulit ng tinanggihang kredensyal ay nagla-lock ng account, at ang MFA prompt ay hindi masasagot ng walang ulong trabaho nang walang disenyo ng enrollment; ang mga script na pagtatangka laban sa browser SSO flow ay nagsusunog lamang ng mga pagsubok. Mas mainam ang VPN payload na inihahatid ng MDM o configuration profile para sa isang fleet, kung saan pag-aari ng platform ang lifecycle ng kredensyal, at panatilihin ang mga script para sa mga client na hindi kayang pamahalaan nang ganoon.
I-log ang exit code at ang unang resource na nabigo, hindi ang katotohanang tumakbo ang script. Ang nag-iisang linyang iyon ang nagpapalit ng alerto ng scheduler sa limang minutong diagnosis.