vpn клијент који долази уз Cisco AnyConnect понаша се као разговор: испише упит, сачека ред и затим испише следећи. Ако тај разговор убаците из датотеке или цеви, исти бинарни програм ради без надзора. Техника је једно преусмеравање и уређена листа одговора, а о поузданости скрипте одлучује листа, а не преусмеравање.

У пракси то кваре две ствари. Редослед упита се помери када гејтвеј затражи нешто додатно, а сачувана лозинка претвори једну грешку у куцању у закључавање налога. Третирајте низ као верзиониране податке које можете упоредити после сваке промене гејтвеја. Падајте гласно уместо поновног покушаја, јер петља је управо начин на који погрешно откуцана лозинка постаје закључан налог.

Један низ, редом којим клијент пита

Покрените клијент једном интерактивно и запишите сваки упит редом којим се појављује. Тај запис постаје датотека одговора. Када датотеку преусмерите у бинарни програм, први ред мора бити сама наредба за повезивање, зато низ почиње именом хоста, а не корисничким именом.

connect vpn.example.com
0
<username>
<password>
y
exit

Голи 0 бира први профил везе када гејтвеј понуди листу; користите индекс који исписује ваш гејтвеј. y прихвата банер за пријаву, па обришите тај ред ако банера нема и уметните га тамо где ваш гејтвеј поставља додатно питање. exit на крају омогућава клијенту чисто затварање када је последњи одговор потрошен.

/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt

Неинтерактивни режим овде није опционалан. Без -s клијент може преузети терминал и игнорисати преусмерени улаз; с њим се одговори читају из тока и процес се враћа. Где бинарни програм тражи подигнуте привилегије, умотајте позив у sudo -n да скрипта одмах падне уместо да се блокира на захтеву за лозинку.

Где датотека одговора цури

Датотека која садржи лозинку је акредитив, па јој дајте дозволе акредитива: режим 600, власништво налога који извршава посао и никада унутар дељеног или синхронизованог директоријума. Направите је са већ примењеним режимом уместо да је поправљате накнадно, јер је датотека накратко читљива свима између уписа и chmod-а.

install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config

Друга половина је argv. Лозинка прослеђена као аргумент видљива је сваком локалном кориснику који излистава процесе, а заврши и у историји шкољке. Читајте је из датотечног дескриптора или променљиве окружења уместо тога и ставите садржај под наводнике да шкољка не може ништа унутар њега проширити.

printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
  | sudo -n /opt/cisco/anyconnect/bin/vpn -s

Пазите на наводнике. Унутар двоструких наводника лозинку која садржи ! може проширити интерактивна шкољка пре него што је клијент уопште види, а грешка долази као општа event-not-found грешка која изгледа као проблем протокола.

Докажите тунел, па га затворите

Стање повезано доказује само да клијент верује да има сесију. Изаберите хост који одговара само из корпоративне мреже и проверите га једном пре било чега другог. Неуспех тамо је грешка рутирања или политике и поновно покретање пријаве то неће променити.

/opt/cisco/anyconnect/bin/vpn state
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 10 https://<internal-host>/
/opt/cisco/anyconnect/bin/vpn disconnect

Проверите излаз стања пре и после прекида везе. Клијент остављен са застарелом сесијом може одбити следећу везу док скрипта још извештава о успеху, а тај начин неуспеха је невидљив ако гледате само излазне кодове. Упоредите оба очитавања уместо да верујете другом самом по себи. Алијаси у профилу шкољке довољни су за свакодневну употребу, док све заказано заслужује исти преглед акредитива и идентитета као и сваки други посао без надзора.

Када фиксна листа престане бити безбедна

Датотека одговора кодира данашњи редослед упита. Промењен банер, принудна промена лозинке или изазов другог фактора претварају је у петљу која може закључати налог, зато скрипта мора изаћи на први неочекивани одговор уместо да се рестартује.

Забележите шта је клијент исписао, вратите статус различит од нуле и препустите одлуку позиваоцу. Где гејтвеј захтева други фактор, искрен одговор је да пријава без надзора није доступна за тај профил, а не да низу треба још један ред.

Ротација припада истој ревизији. Ако се акредитив чува, одлучите ко га може читати, када се мења и шта га уклања када се хост поново изгради. Скрипта која ради годину дана јер нико није дирао лозинку није дизајн, него несрећа која чека политику ротације.

Профили који нису AnyConnect

Два старија Cisco стила акредитива мешају се са овим. Профил vpnc тражи IPSec ID, што је заправо име групе, затим групну тајну, па ваше сопствене акредитиве и сва три долазе од онога ко управља гејтвејем. Наслеђени Cisco IPsec је други протокол од AnyConnect-а, па vpnc не може достићи услугу само за AnyConnect; openconnect --protocol=anyconnect је отворени клијент за тај посао.

Датотека .pcf описује профил старијег клијента. Хост, име групе и групна лозинка у њој могу се ручно поново унети у клијенту који говори Cisco IPsec, иако датотека није универзални увоз и сваки нестандардни порт или начин тунелирања обично нестане у преносу.

Почните од онога што гејтвеј заиста нуди, па одаберите клијент који говори тај протокол. Копирање профила са друге локације је начин на који људи заврше дебагујући акредитиве који никада нису били проблем.

Повезани чланци