Skript skončí s nulou, tunel se objeví a další spuštění je odmítnuto, ještě než se vůbec zeptá na heslo. Nebo stejný příkaz funguje v terminálu a selže z naplánované úlohy s chybou „událost nenalezena“, která nic užitečného nepojmenuje. Obé je rozbitá konverzace přes standardní vstup klienta AnyConnect, nikoli síťová závada. Berte přihlášení jako zapsanou otázku a odpověď a selhání se stanou předvídatelnými a malými.

Proč stejný příkaz uvnitř skriptu selže

Klient čte své odpovědi ze standardního vstupu, jeden řádek na výzvu, v pořadí, v jakém je brána žádá. Cokoli, co změní počet výzev, například nový banner, volič skupiny nebo výzva druhého faktoru, posune každou další odpověď o jeden řádek. Klient pak přečte uživatelské jméno tam, kde čekal heslo, a ohlásí selhání, které neukazuje ani na jedno z toho.

Heslo obsahující vykřičník přidává tišší druhé selhání. Uvnitř dvojitých uvozovek ho shell roztáhne dávno předtím, než klient něco uvidí.

Obalte užitečné zatížení jednoduchými uvozovkami a znak projde neporušený. To je celá oprava a vysvětluje celou třídu hlášení, kde stejný údaj funguje při zadání a selže při uložení. Zkontrolujte, co udělal shell, dřív než zkontrolujete bránu: vytiskněte zatížení přes obal, který ukáže přesné bajty, a spočítejte řádky. Většina takových vyšetřování skončí právě tam.

Zapište odpovědi v pořadí, v jakém je klient žádá

Spusťte klienta jednou interaktivně a zapište každou výzvu po pořadí. Volič skupiny se objeví jen tehdy, když brána zveřejní několik profilů, a výzva k banneru jen tehdy, když je nějaký nakonfigurován. Soubor odpovědí musí odpovídat bráně, na kterou jste skutečně nasměrováni, ne té z dokumentace.

Pak sestavte soubor s přesně touto posloupností, jedna odpověď na řádek. Index skupiny je číslo, které klient vypíše, ne pozice profilu v dokumentu. Přijměte banner jen tehdy, pokud ho vaše brána posílá, a přidejte řádek pro každou další otázku, o níž je známo, že ji tato brána klade. Spusťte klienta s přepínačem neinteraktivního režimu, aby soubor spotřeboval místo čekání na terminál.

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

Stejná posloupnost může přijít rourou, když raději nechcete mít soubor na disku. Pravidla citace stále rozhodují, zda přežije.

Držte údaje mimo seznam procesů

Argument na příkazovém řádku je čitelný každému místnímu uživateli po celou dobu života procesu, takže heslo patří do souboru nebo roury a nikdy do seznamu argumentů. Udělejte ten soubor čitelným jen pro účet, který skript spouští, a po dokončení úlohy ho smažte. Na macOS binárka obvykle leží na stejné cestě jako na Linuxu, ale potvrďte nainstalované umístění, místo abyste ho předpokládali. Obal, který prověří obě cesty, je kratší než zápis o incidentu.

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

Nenechte skript ani opakovat pokusy věčně. Změněný banner nebo heslo, kterému přes noc vypršela platnost, promění pevný soubor odpovědí v retry smyčku, a právě ta smyčka účet uzamkne.

Selžete jednou, vytiskněte vlastní chybový text klienta a skončete. Naplánovaná úloha potřebuje stejnou kontrolu identity a dostupnosti údajů jako každá jiná úloha bez dohledu, protože údaj, který tiše vyprší, nelze odlišit od výpadku ve tři ráno.

Potvrďte relaci, než uvěříte návratovému kódu

Připojený stav dokazuje, že tunel existuje, a nic víc. Otestujte jeden prostředek, který musí být přes něj dostupný, než skript začne skutečnou práci, a selhání tam berte jako jinou závadu než neúspěšné přihlášení. Jinak budete opakovat zcela dobré spojení, které prostě nedosáhne svého cíle.

Zeptejte se klienta na stav před odpojením a po něm, protože zastaralá relace může odmítnout další připojení, zatímco váš skript hlásí úspěch.

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

Zaznamenejte výstup stavu vedle návratového kódu, protože samotný kód nedokáže oddělit odmítnuté přihlášení od relace, která se nikdy nezavřela. Když brána vyžaduje druhý faktor nebo interaktivní schválení, přestaňte ten krok skriptovat a použijte místo toho mechanismus, který klient podporuje. Pevný soubor odpovědí je pohodlí pro údaj, který ovládáte, ne způsob, jak obejít krok ověření, který neovládáte. Držte rozsah tak úzký a zůstane to krátký skript.

Kdy je pevný soubor odpovědí špatný nástroj

Druhý faktor nebo výzva ke schválení tento vzorec úplně maří, a to je hranice návrhu, ne skriptovací hlavolam. Použijte jakýkoli mechanismus, který klient pro tento krok podporuje místo toho, abyste odpověď předem hádali. Pevný soubor funguje jen pro údaje, které mezi spuštěními zůstávají stejné.

Dva starší styly údajů se také pletou s AnyConnect. Profil vpnc mluví jiným protokolem a chce název skupiny jako identifikátor IPSec, pak sdílené skupinové tajemství a pak údaje vašeho vlastního účtu.

Protože se protokoly liší, vpnc nedosáhne na bránu, která zveřejňuje jen profily AnyConnect, a obvyklou otevřenou alternativou pro tuto službu je openconnect se zvoleným protokolem anyconnect. Soubor pcf patří starému klientovi Cisco a i když jeho hostitel, název skupiny a skupinové heslo lze znovu zadat v klientovi, který ještě mluví Cisco IPsec, soubor se mezi klienty nepřenáší. Neobvyklý port nebo nestandardní režim tunelování se při tom přenosu zpravidla ztratí. Rozhodněte, který protokol brána nabízí, dřív než vyberete nástroj.

Související články