Hyrje në Cisco Secure Client nga një shell Linux, pa GUI
Një here-dokument nuk është protokoll hyrjeje. Regjistro rendin real të pyetjeve, përdor expect kur ndryshon dhe mbaj fjalëkalimin jashtë argv dhe historisë.
Besimi është se një here-dokument me katër rreshta është një hyrje e plotë jo-interaktive, dhe ai qëndron deri në momentin kur portiku ofron dy grupe, printon një baner ose kërkon një token pas fjalëkalimit. Atëherë i njëjti skript e shkruan fjalëkalimin në një menu që priste një numër. Klienti i rreshtit të komandës në Linux është i skriptueshëm, por vetëm nëse i jep atë që pret vërtet, jo atë që supozoi udhëzuesi.
Here-dokumenti fiks është mit
Klienti Linux i Cisco instalon një program të vogël në /opt/cisco/anyconnect/bin/vpn, dhe Secure Client 5 e dërgon ende. Ndërsa shërbimi vpnagentd punon, flamuri -s lexon përgjigje nga hyrja standarde në rendin që klienti i kërkon. Ky rend nuk është fiks mes serverëve.
Menuja e grupeve shton një rresht. Baneri i hyrjes shton një tjetër. Kërkesa për token pas fjalëkalimit e thyen plotësisht një skript me katër rreshta, sepse rreshti i pestë nuk do të ishte kurrë tokeni. Dështimi është i qetë: klienti merr vargun e gabuar, përpjekja për lidhje mbaron dhe skripti nuk raporton asgjë të dobishme.
Nis klientin me dorë një herë kundrejt të njëjtit portik dhe versionit, dhe shkruaj pyetjet sipas rendit që shfaqen. Ai transkript është specifikimi që skripti yt duhet të përmbushë.
Çfarë pret klienti
Në rastin e zakonshëm me një grup, sekuenca është emri i përdoruesit, fjalëkalimi dhe ndonjëherë një konfirmim baneri. Rreshti i parë i një here-dokumenti bëhet indeks menuje vetëm kur serveri paraqet vërtet një menu, prandaj i njëjti skript punon në një vend dhe dështon në tjetrin.
/opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net <<EOF
0
alice
$VPN_PASSWORD
y
EOF
Lexoje këtë si katër përgjigje për katër pyetje të mundshme, jo si protokoll fiks. Zeroja është një zgjedhje menuje, jo një fjalëkalim, dhe y-ja e fundit pranon një baner që shumë portikë nuk e dërgojnë kurrë.
Përdor expect kur rendi nuk parashikohet
Kur rendi i pyetjeve ndryshon, ndal së numëruari rreshtat dhe prit pyetjen. Një skript expect nis komandën connect, pret pyetjen e emrit të përdoruesit, dërgon, pret pyetjen e fjalëkalimit, dërgon dhe pastaj pret gjendjen e lidhur. Çdo pritje ka afatin e vet kohor.
Trajto një afat kohor si dështim dhe dila. Një skript që vazhdon të dërgojë input pas një pyetjeje të papritur do ta shkruajë me kënaqësi fjalëkalimin në një shell, në një menu ose në çdo gjë tjetër që po lexon. Kështu një skript hyrjeje bëhet incident.
Expect të jep gjithashtu një transkript që mund ta regjistrojësh me sekretin e hequr, dhe kjo vlen më shumë se kodi i daljes kur një portik ndryshon pyetjet e tij pas një përditësimi.
Sekreti duhet të jetojë diku
Çdo version i këtij problemi ndan një dobësi: fjalëkalimi duhet të ekzistojë në një formë që klienti mund ta lexojë. Kalimi si argument e ekspozon në tabelën e proceseve. Echo përmes një tubi shpesh e vendos në historinë e shell-it. Të dyja lexohen nga përdorues të tjerë lokalë në një host kërcimi të përbashkët.
install -m 600 /dev/null ~/.vpn-secret
umask 077; VPN_PASSWORD=$(cat ~/.vpn-secret) /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net
Një skedar me modalitetin 600 në pronësi të llogarisë është minimumi, dhe ai është ende një sekret në tekst të thjeshtë në disk. secret-tool lookup lexon nga unaza e çelësave e Linux, dhe në macOS të njëjtën punë e bën security find-generic-password -w. Ku organizata mbështet vërtetim me certifikatë ose SAML, preferoje atë, sepse një fjalëkalim i ruajtur plus MFA ende nuk mund të përfundojë një hyrje pa njeri.
Konfirmo tunelin, pastaj merr përsipër shkëputjen
Mos u beso mungesës së tekstit të gabimit. Pyet klientin për gjendjen e tij dhe kontrollo ndërfaqen në mënyrë të pavarur:
/opt/cisco/anyconnect/bin/vpn state
ip -brief address
Gjendja duhet të lexojë Connected, dhe një ndërfaqe tuneli duhet të ketë një adresë. Pastaj kërko një burim që tuneli duhet të arrijë, sepse një gjendje e lidhur pa rrugë është rezultat real dhe i lehtë për t’u anashkaluar.
Shkëputu me vpn disconnect dhe lëre skriptin që nisi tunelin ta marrë përsipër shkëputjen. Një punë e dështuar që lë një sesion hapur konsumon një vend licence dhe duket si problem vërtetimi për personin tjetër që provon.
Rendi i punës: konfirmo vpnagentd, regjistro rendin real të pyetjeve, zgjidh here-dokument ose expect, mbaj sekretin jashtë argv dhe historisë, verifiko gjendjen dhe një burim, pastaj shkëputu në të njëjtin skript.