GUI жок Linux кабыгынан Cisco Secure Client'ке кирүү
here-document — кирүү протоколу эмес. Сурамдардын чыныгы тартибин жазып ал, ал өзгөрсө expect колдон, ал эми сырсөздү argv менен тарыхтан тышкары карма.
Төрт саптан турган here-document толук интерактивдүү эмес кирүү деген ишеним бар, жана ал шлюз эки топ сунуштаганга, баннер басып чыгарганга же сырсөздөн кийин токен сураганга чейин сакталат. Ошондо ошол эле скрипт сырсөздү сан күтүп турган менюга жазып салат. Linux буйрук сабынын клиентин скрипттөөгө болот, бирок ага окуу куралы болжолдогонду эмес, чындап күтүп турган нерсени берсең гана.
Катып калган here-document — уламыш
Cisco'нун Linux клиенти /opt/cisco/anyconnect/bin/vpn жайгашкан жерине кичине программа орнотот, жана Secure Client 5 аны азыркыга чейин жеткирет. vpnagentd кызматы иштеп турганда, -s желеги жоопторду стандарттык кирүүдөн клиент сураган тартипте окуйт. Бул тартип серверлердин ортосунда туруктуу эмес.
Топ менюсу бир сап кошот. Кирүү баннери дагы бир сап кошот. Сырсөздөн кийинки токен суроо төрт саптуу скриптти толугу менен бузат, анткени бешинчи сап эч качан токен болушу керек эмес эле. Ийгиликсиздик үнсүз: клиент туура эмес сапты алат, туташуу аракети бүтөт, ал эми скрипт эч кандай пайдалуу нерсе билдирбейт.
Клиентти ошол эле шлюз менен версияга каршы бир жолу кол менен иштетип, сурамдарды кайсы тартипте келсе, ошол тартипте жазып ал. Ошол жазуу — сенин скриптиң аткарышы керек болгон спецификация.
Клиент эмнени күтөт
Адаттагы бир топ учурда тартип: колдонуучунун аты, сырсөз жана кээде баннерди ырастоо. here-document тун биринчи сабы меню индексине сервер чынында меню көрсөткөндө гана айланат, ошондуктан бир эле скрипт бир жерде иштеп, кийинки жерде ийгиликсиз болот.
/opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net <<EOF
0
alice
$VPN_PASSWORD
y
EOF
Муну төрт мүмкүн болгон суроого төрт жооп катары оку, катып калган протокол катары эмес. Нөл — меню тандоо, сырсөз эмес, ал эми аягындагы y көп шлюздар эч качан жөнөтпөгөн баннерди кабыл алат.
Тартип болжолдонбой турганда expect колдон
Сурамдардын тартиби өзгөрсө, саптарды саноону токтотуп, сурамды күт. expect скрипти connect буйругун иштетет, колдонуучу атынын сурамын күтөт, жөнөтөт, сырсөз сурамын күтөт, жөнөтөт, анан туташкан абалды күтөт. Ар бир күтүүнүн өз убакыт чеги бар.
Убакыт чегинин бүтүшүн ийгиликсиздик деп эсептеп, чык. Күтүлбөгөн сурамдан кийин кирүүнү жөнөтө берген скрипт сырсөздү кубаныч менен кабыкка, менюга же ошол учурда окуп жаткан кандайдыр бир нерсеге жазып салат. Ошентип кирүү скрипти окуяга айланат.
expect ошондой эле сырды алып салып жазууга боло турган жазууну берет, жана шлюз жаңыртуудан кийин сурамдарын өзгөрткөндө бул чыгуу коддон кымбат.
Сыр бир жерде жашоого тийиш
Бул маселенин ар бир версиясында бир алсыздык бар: сырсөз клиент окуй алган формада болушу керек. Аны аргумент катары берүү процесстер таблицасында ачат. Түтүк аркылуу өткөрүү аны көбүнчө кабык тарыхына калтырат. Экөөнү тең жалпы секирүү хостундагы башка жергиликтүү колдонуучулар окуй алат.
install -m 600 /dev/null ~/.vpn-secret
umask 077; VPN_PASSWORD=$(cat ~/.vpn-secret) /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net
Эсепке таандык 600 режиминдеги файл — эң аз талап, жана ал дисктеги ачык текст сыр бойдон калат. secret-tool lookup Linux ачкыч шакегинен окуйт, ал эми macOS'то ошол эле ишти security find-generic-password -w аткарат. Уюм сертификат же SAML аутентификациясын колдосо, ошону танда, анткени сакталган сырсөз менен MFA чогуу да адамсыз кирүүнү бүтүрө албайт.
Туннелди ыраста, анан жабылууну өзүңө ал
Ката текстинин жоктугуна ишенбе. Клиенттен анын абалын сура жана интерфейсти өзүнчө текшер:
/opt/cisco/anyconnect/bin/vpn state
ip -brief address
Абал Connected деп көрсөтүшү керек, ал эми туннел интерфейсинде дарек болушу керек. Анан туннел жетиши керек болгон бир ресурсту сура, анткени маршрутсуз туташкан абал чыныгы натыйжа жана оңой көздөн качарылат.
vpn disconnect менен ажырат, жана туннелди баштаган скрипт жабылууну өзүнө алсын. Сессияны ачык калтырган ийгиликсиз жумуш лицензия ордун корот жана кийинки адамга аутентификация маселеси болуп көрүнөт.
Жумуш тартиби: vpnagentd ыраста, сурамдардын чыныгы тартибин жазып ал, here-document же expect танда, сырды argv менен тарыхтан тышкары карма, абалды жана бир ресурсту текшер, анан ошол эле скриптте ажырат.