Аўтаматызацыя ўваходу ў VPN, калі ў кліента няма API або CLI
Выберыце шлях сцэнара паводле таго, што прадстаўляе кліент: профіль ва ўласнасці АС, CLI пастаўшчыка, які чытае сакрэт са stdin, або аўтаматызацыя GUI як апошні сродак.
Гэта вырашаюць тры пытанні, і толькі тры. Ці стварае кліент запіс злучэння ў аперацыйнай сістэме, які перажывае перазагрузку? Ці пастаўляе ён камандны радок, які можа ўзяць сакрэт не са свайго спісу аргументаў? Ці патрабаванне ідэнтычнасці прымушае чалавека адказаць на запыт у браўзеры? Адкажыце ў гэтым парадку, і выбар перастане быць справай смаку, бо запланаваная задача можа быць настолькі бязлюднай, наколькі дазваляе найслабейшы з трох адказаў.
Супстаўце кліента з трыма слаямі, якія можна праграмаваць
Уласны профіль АС, CLI пастаўшчыка, кліент толькі з GUI і кліент з браўзерным SSO патрабуюць чатырох розных падыходаў. Першыя два перажываюць перазагрузкі без нагляду, і перазагрузкі без нагляду — гэта ўся сутнасць. Астатнія два патрабуюць праектнага рашэння раней, чым сцэнара.
| 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 |
Шлях першы: профілем ужо валодае аперацыйная сістэма
Гэта самы танны шлях і той, які большасць прапускае. У 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.comFortiClient і некаторыя зборкі GlobalProtect зусім не маюць падтрыманага CLI, а супольны кліент або ліцэнзаваная пастаўшчыком замена — гэта рашэнне аб закупцы, а не абыход. У CI дайце службоваму рахунку правы на менавіта гэты бінарнік, а не на абалонку, каб укаранёны аргумент не мог стаць камандай root.
Шлях трэці: аўтаматызацыя GUI і чаму яна апошняя
Калі ў афіцыйнага кліента няма інтэрфейсу, сцэнары націскаюць кнопкі праз паведамленні вокнаў або SendKeys. Гэта крохка да версіі і лакалі, можа пакінуць паўпадключаную сесію і моўчкі здаецца, калі дыялог з'яўляецца на няправільнай мове. Калі выбіраеце гэты шлях, зафіксуйце версію кліента, пасля праверце выніковы стан злучэння і трымайце ручны рэзервовы варыянт апісаным побач са сцэнарам.
Тая ж асцярожнасць тычыцца прымусовага адключэння кліента праз забойства яго працэсу. Тунель можа перажыць працэс, або наглядчык можа перазапусціць яго, таму забойства і перазапуск таксама не надзейны скід.
Што ламаецца пасля ўздыму тунеля
Паспяховы набор даказвае толькі аўтэнтыфікацыю і нічога больш. Праверце рэсурс, для якога існуе задача, з яго пратаколам і кароткім тайм-аўтам, і назвіце этап у паведамленні пра збой. Профілі, сертыфікаты і захаваныя ўліковыя даныя, бачныя на вашым працоўным стале, могуць быць нябачныя для сесіі службы, таму запусціце задачу адзін раз пад уласным рахункам планавальніка, перш чым давяраць ёй.
Абмяжуйце паўторы. Цыкл, які паўтарае адхіленыя ўліковыя даныя, блакуе рахункі, а на запыт MFA бязлюдная задача не можа адказаць без праекта рэгістрацыі; сцэнараваныя паўторы супраць браўзернага SSO проста спальваюць спробы. Аддайце перавагу VPN-карыснай нагрузцы, якая дастаўляецца праз MDM, або профілю канфігурацыі для парку, дзе платформа валодае жыццёвым цыклам уліковых даных, і трымайце сцэнары для кліентаў, якімі так кіраваць немагчыма.
Запісвайце код выхаду і першы рэсурс, які збаўляецца, а не факт запуску сцэнара. Менавіта гэты адзін радок ператварае папярэджанне планавальніка ў дыягназ за пяць хвілін.