Skript skončí s nulou, tunel sa objaví a ďalšie spustenie je odmietnuté skôr, než sa vôbec opýta na heslo. Alebo ten istý príkaz funguje v termináli a zlyhá z naplánovanej úlohy s chybou „udalosť sa nenašla“, ktorá nič užitočné nepomenuje. Oboje je pokazená konverzácia cez štandardný vstup klienta AnyConnect, nie sieťová porucha. Berte prihlásenie ako zapísanú otázku a odpoveď a zlyhania sa stanú predvídateľnými a malými.

Prečo ten istý príkaz zlyhá vnútri skriptu

Klient číta svoje odpovede zo štandardného vstupu, jeden riadok na výzvu, v poradí, v akom ich brána žiada. Čokoľvek, čo zmení počet výziev, napríklad nový baner, volič skupiny alebo výzva druhého faktora, posunie každú ďalšiu odpoveď o jeden riadok. Klient potom prečíta používateľské meno tam, kde čakal heslo, a ohlási zlyhanie, ktoré neukazuje na ani jedno z nich.

Heslo s výkričníkom pridáva tichšie druhé zlyhanie. Vnútri dvojitých úvodzoviek ho shell roztiahne dávno predtým, než klient niečo uvidí.

Vložte užitočné zaťaženie do jednoduchých úvodzoviek a znak prejde neporušený. To je celá oprava a vysvetľuje celú triedu hlásení, kde ten istý údaj funguje pri zadaní a zlyhá pri uložení. Skontrolujte, čo urobil shell, skôr než skontrolujete bránu: vytlačte zaťaženie cez obal, ktorý ukáže presné bajty, a spočítajte riadky. Väčšina takých vyšetrovaní sa končí práve tam.

Zapíšte odpovede v poradí, v akom ich klient žiada

Spustite klienta raz interaktívne a zapíšte každú výzvu po poradí. Volič skupiny sa objaví len vtedy, keď brána zverejní viac profilov, a výzva k baneru len vtedy, keď je nejaký nakonfigurovaný. Súbor odpovedí musí zodpovedať bráne, na ktorú ste skutočne nasmerovaní, nie tej z dokumentácie.

Potom zostavte súbor s presne týmto postupom, jedna odpoveď na riadok. Index skupiny je číslo, ktoré klient vypíše, nie pozícia profilu v dokumente. Prijmite baner len vtedy, ak ho vaša brána posiela, a pridajte riadok pre každú ďalšiu otázku, o ktorej je známe, že ju táto brána kladie. Spustite klienta s prepínačom neinteraktívneho režimu, aby súbor spotreboval namiesto čakania na terminál.

connect vpn.lab.example
0
username
password
y
exit
/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt

Rovnaký postup môže prísť rúrou, keď radšej nechcete mať súbor na disku. Pravidlá citovania stále rozhodujú, či prežije.

Držte údaje mimo zoznamu procesov

Argument na príkazovom riadku je čitateľný každému miestnemu používateľovi po celú dobu života procesu, takže heslo patrí do súboru alebo rúry a nikdy do zoznamu argumentov. Urobte ten súbor čitateľným len pre účet, ktorý skript spúšťa, a po dokončení úlohy ho vymažte. V macOS binárka zvyčajne leží na tej istej ceste ako v Linuxe, ale potvrďte nainštalované umiestnenie namiesto toho, aby ste ho predpokladali. Obal, ktorý preverí obe cesty, je kratší než zápis o incidente.

printf 'username\npassword\ny\n' | /opt/cisco/anyconnect/bin/vpn -s connect vpn.lab.example

Nenechajte skript ani opakovať pokusy donekonečna. Zmenený baner alebo heslo, ktorému cez noc vypršala platnosť, premenia pevný súbor odpovedí na slučku opakovaní, a práve tá slučka uzamkne účet.

Zlyhajte raz, vytlačte vlastný chybový text klienta a skončite. Naplánovaná úloha potrebuje rovnakú kontrolu identity a dostupnosti údajov ako každá iná úloha bez dozoru, pretože údaj, ktorý ticho vyprší, nemožno odlíšiť od výpadku o tretej ráno.

Potvrďte reláciu, skôr než uveríte návratovému kódu

Pripojený stav dokazuje, že tunel existuje, a nič viac. Otestujte jeden zdroj, ktorý musí byť cez neho dostupný, skôr než skript začne skutočnú prácu, a zlyhanie tam berte ako inú poruchu než neúspešné prihlásenie. Inak budete opakovať úplne dobré spojenie, ktoré jednoducho nedosiahne svoj cieľ.

Opýtajte sa klienta na jeho stav pred odpojením a po ňom, pretože zastaraná relácia môže odmietnuť ďalšie pripojenie, zatiaľ čo váš skript hlási úspech.

/opt/cisco/anyconnect/bin/vpn state
/opt/cisco/anyconnect/bin/vpn disconnect

Zaznamenajte výstup stavu vedľa návratového kódu, pretože samotný kód nedokáže oddeliť odmietnuté prihlásenie od relácie, ktorá sa nikdy neuzavrela. Keď brána vyžaduje druhý faktor alebo interaktívne schválenie, prestaňte ten krok skriptovať a namiesto toho použite mechanizmus, ktorý klient podporuje. Pevný súbor odpovedí je pohodlie pre údaje, ktoré ovládate, nie spôsob, ako obísť krok overenia, ktorý neovládate. Držte rozsah tak úzky a zostane to krátky skript.

Kedy je pevný súbor odpovedí nesprávny nástroj

Druhý faktor alebo výzva na schválenie tento vzorec úplne porážajú, a to je hranica návrhu, nie skriptovacia hádanka. Použite akýkoľvek mechanizmus, ktorý klient pre ten krok podporuje namiesto toho, aby ste odpoveď vopred hádali. Pevný súbor funguje len pre údaje, ktoré medzi spusteniami zostávajú rovnaké.

Dva staršie štýly údajov sa tiež zamieňajú s AnyConnect. Profil vpnc hovorí iným protokolom a chce názov skupiny ako identifikátor IPSec, potom spoločné skupinové tajomstvo a potom údaje vášho vlastného účtu.

Keďže sa protokoly líšia, vpnc nedosiahne bránu, ktorá zverejňuje len profily AnyConnect, a obvyklou otvorenou alternatívou pre túto službu je openconnect so zvoleným protokolom anyconnect. Súbor pcf patrí starému klientovi Cisco a hoci jeho hostiteľ, názov skupiny a skupinové heslo možno znova zadať v klientovi, ktorý ešte hovorí Cisco IPsec, súbor sa medzi klientmi neprenáša. Neobvyklý port alebo neštandardný režim tunelovania sa pri tom prenose zvyčajne stratí. Rozhodnite, ktorý protokol brána ponúka, skôr než vyberiete nástroj.

Súvisiace články