Како написати скрипту за пријаву на AnyConnect у Linux-у и macOS-у
Бинарни фајл vpn чита одговоре са стандардног улаза по редоследу захтева. Саставите низ, цитирајте га једном, држите га ван листе процеса и прво тестирајте један ресурс.
Скрипта се завршава нулом, тунел се појављује и следеће покретање се одбија пре него што уопште затражи лозинку. Или иста команда ради у терминалу и пада из заказаног посла са грешком «догађај није пронађен» која ништа корисно не именује. Оба су покварен разговор преко стандардног улаза клијента 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, датотека се не преноси између клијената. Необичан порт или нестандардни режим тунеловања обично се губе при том премештању. Одлучите који протокол капија нуди пре него што изаберете алат.