Скрыпт завяршаецца з нулём, тунель з’яўляецца, і наступны запуск адхіляецца яшчэ да таго, як ён паспее запытаць пароль. Або той жа загад працуе ў тэрмінале і зрываецца з запланаванай задачы з памылкай «падзея не знойдзена», якая нічога не называе. І тое, і другое — гэта няправільны дыялог праз стандартны ўвод у кліенце AnyConnect, а не збой сеткі. Разглядайце ўваход як запісанае пытанне-адказ, і збоі стануць прадказальнымі і дробнымі.

Чаму той жа загад зрываецца ўнутры скрыпта

Кліент чытае свае адказы са стандартнага ўводу, па адным радку на запыт, у тым парадку, у якім іх задае шлюз. Усё, што змяняе колькасць запытаў, напрыклад новы банер, выбар групы або запыт другога фактару, зрушвае кожны наступны адказ на адзін радок. Тады кліент чытае імя карыстальніка там, дзе чакаў пароль, і паведамляе пра збой, які не паказвае ні на адно з іх.

Пароль з клічнікам дадае цішэйшы другі збой. Унутры падвойных лапак абалонка раскрывае яго задоўга да таго, як кліент што-небудзь убачыць.

Ахініце нагрузку адзінарнымі лапкамі, і сімвал пройдзе цэлым. Гэта ўвесь рамонт, і ён тлумачыць цэлы клас паведамленняў, дзе тыя ж уліковыя даныя працуюць пры ўводзе і зрываюцца пры захаванні. Праверце, што зрабіла абалонка, перш чым правяраць шлюз: надрукуйце нагрузку праз абгортку, якая паказвае дакладныя байты, і палічыце радкі. Большасць такіх расследаванняў сканчаецца менавіта там.

Запішыце адказы ў парадку, у якім іх запытвае кліент

Запусціце кліент інтэрактыўна адзін раз і запішыце кожны запыт па парадку. Выбар групы з’яўляецца толькі тады, калі шлюз публікуе некалькі профіляў, а запыт банера — толькі калі ён наладжаны. Файл адказаў павінен адпавядаць шлюзу, на які вы сапраўды накіраваныя, а не таму, што ў дакументацыі.

Затым пабудуйце файл з дакладна такой паслядоўнасцю, адзін адказ на радок. Індэкс групы — гэта нумар, які пералічвае кліент, а не месца профілю ў дакуменце. Прымайце банер, толькі калі ваш шлюз яго дасылае, і дадайце радок для кожнага дадатковага пытання, якое гэты шлюз вядомы тым, што задае. Запускайце кліент з неінтэрактыўным сцягам, каб ён спажываў файл замест чакання тэрмінала.

connect vpn.lab.example
0
username
password
y
exit
/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt

Тая ж паслядоўнасць можа прыйсці праз канал, калі вы не хочаце трымаць файл на дыску. Правілы лапкавання ўсё яшчэ вырашаюць, ці выжыве ён.

Трымайце ўліковыя даныя па-за спісам працэсаў

Аргумент у камандным радку чытальны для кожнага лакальнага карыстальніка на працягу ўсяго жыцця працэсу, таму пароль належыць у файл або канал і ніколі ў спіс аргументаў. Зрабіце гэты файл чытальным толькі для ўліковага запісу, які запускае скрыпт, і выдаліце яго, калі задача скончыцца. На macOS бінарнік звычайна ляжыць па тым жа шляху, што і на Linux, але пацвердзіце ўсталяванае месца, а не выказвайце здагадку. Абгортка, якая правярае абодва шляхі, карацейшая за запіску пра інцыдэнт.

printf 'username\npassword\ny\n' | /opt/cisco/anyconnect/bin/vpn -s connect vpn.lab.example

Не дазваляйце скрыпту паўтараць спробы бясконца. Зменены банер або пароль, тэрмін якога скончыўся за ноч, ператвараюць фіксаваны файл адказаў у цыкл паўтораў, і менавіта гэты цыкл блакуе ўліковы запіс.

Зрвайцеся адзін раз, надрукуйце ўласны тэкст памылкі кліента і выйдзіце. Запланаваная задача патрабуе такога ж агляду ідэнтычнасці і даступнасці ўліковых даных, як любая іншая безнаглядная задача, бо ўліковыя даныя, якія ціха сканчаюцца, немагчыма адрозніць ад аварыі ў тры гадзіны ночы.

Пацвердзіце сеанс, перш чым давяраць коду выхаду

Злучаны стан даказвае, што тунель існуе, і нічога большага. Праверце адзін рэсурс, які павінен быць даступны праз яго, перш чым скрыпт пачне сапраўдную працу, і лічыце збой там іншай няспраўнасцю, чым няўдалы ўваход. Інакш вы будзеце паўтараць цалкам добрае злучэнне, якое проста не можа дасягнуць пункту прызначэння.

Спытайце ў кліента яго стан да і пасля адключэння, бо састарэлы сеанс можа адхіліць наступнае злучэнне, пакуль ваш скрыпт паведамляе пра поспех.

/opt/cisco/anyconnect/bin/vpn state
/opt/cisco/anyconnect/bin/vpn disconnect

Запішыце вывад стану побач з кодам выхаду, бо адзін код не можа аддзяліць адхілены ўваход ад сеанса, які так і не закрыўся. Калі шлюз патрабуе другі фактар або інтэрактыўнае адабрэнне, спыніцеся пісаць гэты крок як скрыпт і выкарыстайце механізм, які падтрымлівае кліент. Фіксаваны файл адказаў — гэта зручнасць для ўліковых даных, якія вы кантралюеце, а не спосаб абысці этап аўтэнтыфікацыі, які вы не кантралюеце. Трымайце абсяг настолькі вузкім, і гэта застанецца кароткім скрыптам.

Калі фіксаваны файл адказаў — няправільны інструмент

Другі фактар або запыт адабрэння цалкам разбураюць гэты шаблон, і гэта мяжа дызайну, а не галаваломка для скрыпта. Выкарыстайце любы механізм, які кліент падтрымлівае для гэтага кроку замест таго, каб адгадваць адказ загадзя. Фіксаваны файл працуе толькі для ўліковых даных, якія застаюцца тымі ж паміж запускамі.

Два старэйшыя стылі ўліковых даных таксама блытаюць з AnyConnect. Профіль vpnc размаўляе на іншым пратаколе, і яму патрэбна імя групы як ідэнтыфікатар IPSec, затым агульны сакрэт групы, затым вашыя ўласныя даныя ўліковага запісу.

Паколькі пратаколы розныя, vpnc не можа дасягнуць шлюза, які публікуе толькі профілі AnyConnect, і звычайная адкрытая альтэрнатыва для гэтай паслугі — гэта openconnect з выбраным пратаколам anyconnect. Файл pcf належыць старому кліенту Cisco, і хоць яго хост, імя групы і пароль групы можна паўторна ўвесці ў кліенце, які ўсё яшчэ размаўляе на Cisco IPsec, файл не пераносіцца паміж кліентамі. Нестандартны порт або нестандартны рэжым тунелявання звычайна губляецца пры такім пераносе. Вызначце, які пратакол прапануе шлюз, перш чым выбіраць інструмент.

Падобныя артыкулы