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

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