AnyConnect Linux'то: кирүү ырааттуулугун коопсуз скрипттөө
Cisco AnyConnect vpn бинардык файлы жоопторду stdin'ден окуйт жана бул кайталануучу кирүү үчүн жетиштүү. Ырааттуулукту түз, файлды корго, текшер жана токто.
Cisco AnyConnect менен келген vpn кардары сүйлөшүү сыяктуу жүрөт: белги басып чыгарат, бир сапты күтөт, анан кийинкисин басып чыгарат. Ошол сүйлөшүүнү файлдан же түтүктөн берсеңиз, ошол эле бинардык файл көзөмөлсүз иштейт. Ыкма бир кайра багыттоо жана иреттелген жооптор тизмеси, ал эми скрипт ишенимдүүбү — муну кайра багыттоо эмес, тизме чечет.
Иш жүзүндө муну эки нерсе бузат. Капка кошумча бир нерсе сураганда белгилердин ирети жылат, ал эми сакталган сырсөз бир терүү катасын эсептин кулпуланышына айландырат. Ырааттуулукту капканын ар кандай өзгөрүүсүнөн кийин салыштырууга боло турган версияланган маалымат катары караңыз. Кайталоонун ордуна үн чыгарып ийгиликсиз болуңуз, анткени цикл — туура эмес терүүлөнгөн сырсөздүн кулпуланган эсепке айланышынын так жолу.
Бир ырааттуулук, кардар сураган ирет менен
Кардарды бир жолу интерактивдүү иштетип, ар бир белгини пайда болгон ирети менен жазып алыңыз. Ошол жазуу жооптор файлына айланат. Файлды бинардыкка кайра багыттаганда биринчи сап байланыш буйругунун өзү болушу керек, ошондуктан ырааттуулук колдонуучу атынан эмес, хост атынан башталат.
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. Аргумент катары берилген сырсөз процесстерди тизмелеген ар бир жергиликтүү колдонуучуга көрүнөт жана shell тарыхына да түшөт. Анын ордуна файл дескрипторунан же чөйрө өзгөрмөсүнөн окуп, жүктөмдү тырмакчага алыңыз, ошондо shell ичинде эч нерсени кеңейте албайт.
printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
| sudo -n /opt/cisco/anyconnect/bin/vpn -s
Тырмакчаларга көңүл буруңуз. Кош тырмакчанын ичинде ! камтыган сырсөздү интерактивдүү shell кардар көрө электе эле кеңейтиши мүмкүн, ал эми ийгиликсиздик протокол көйгөйүнө окшош жалпы 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
Ажыратуудан мурун жана кийин абал чыгарылышын текшериңиз. Эскирген сессия менен калтырылган кардар кийинки туташуудан баш тартышы мүмкүн, ал эми скрипт азыр деле ийгилик тууралуу кабарлайт, жана бул ийгиликсиздик режими чыгуу коддоруна гана карасаңыз көрүнбөйт. Экинчи окууга жалгыз ишенүүнүн ордуна эки окууну салыштырыңыз. Shell профилиндеги лакап аттар күнүмдүк колдонууга жетиштүү, ал эми пландалган нерселердин баары башка ар кандай көзөмөлсүз жумуш сыяктуу эле эсептик дайындарды жана инсандыкты карап чыгууга татыктуу.
Туруктуу тизме коопсуз болбой калганда
Жооптор файлы бүгүнкү белгилердин иретин коддойт. Өзгөргөн баннер, мажбурлап сырсөз алмаштыруу же экинчи фактор талабы аны эсепти кулпулап коюшу мүмкүн болгон циклге айландырат, ошондуктан скрипт кайра баштоонун ордуна биринчи күтүлбөгөн жоопто чыгышы керек.
Кардар басып чыгарганды кармап, нөлгө барабар эмес статус кайтарып, чечимди чакырганга калтырыңыз. Капка экинчи факторду талап кылган жерде, чын жооп — бул профиль үчүн көзөмөлсүз кирүү жеткиликсиз, ал эми ырааттуулукка дагы бир сап керек дегендик эмес.
Айландыруу да ошол эле карап чыгууга кирет. Эгер эсептик дайындар сакталса, аны ким окуй аларын, качан өзгөрөрүн жана хост кайра курулганда аны эмне жок кыларын чечиңиз. Бирөө сырсөзгө тийбегендиктен бир жыл иштеген скрипт — дизайн эмес, айландыруу саясатын күтүп турган кырсык.
AnyConnect эмес профилдер
Cisco'нун эки эски эсептик дайындар стили ушуну менен чаташтырылат. vpnc профили IPSec ID сурайт, ал чындыгында топтун аты, анан топ сыры, анан өзүңүздүн эсептик дайындарыңыз, жана үчөө тең капканы башкарган адамдан келет. Эски Cisco IPsec — AnyConnect'тен башка протокол, ошондуктан vpnc тек AnyConnect кызматына жете албайт; openconnect --protocol=anyconnect — ошол жумуш үчүн ачык кардар.
.pcf файлы эски кардар профилин сүрөттөйт. Андагы хост, топтун аты жана топ сырсөзү Cisco IPsec сүйлөгөн кардарда кол менен кайра киргизилиши мүмкүн, бирок файл универсалдуу импорт эмес жана стандарттык эмес порт же туннелдөө режими адатта өткөрүүдө жоголот.
Капка чындап сунуш кылган нерседен баштаңыз, анан ошол протоколду сүйлөгөн кардарды тандаңыз. Профилди башка сайттан көчүрүү — адамдар эч качан көйгөй болбогон эсептик дайындарды оңдоп баштаган жолу.