Bei Cisco Secure Client aus enger Linux-Shell ageloggen, ouni GUI
En Here-Dokument ass kee Login-Protokoll. Halt déi richteg Reihenfolge vun den Ufroen fest, benotz expect wann se ännert, a hal d’Passwuert aus argv an Historie eraus.
D’Meenung ass, datt en Here-Dokument mat véier Zeilen en kompletten net-interaktiven Login ass, an déi Meenung hält just bis de Gateway zwee Gruppen ubitt, e Banner dréckt oder no dem Passwuert en Token freet. Dann tippt dee selwechte Skript d’Passwuert an e Menü, deen eng Zuel erwaart huet. De Kommandozeilen-Client op Linux ka geskript ginn, awer nëmmen wann Dir him gitt wat hien tatsächlech erwaart, an net wat den Tutorial ugeholl huet.
De feste Here-Dokument ass e Mythos
Dem Cisco säi Linux-Client installéiert e klengt Programm op /opt/cisco/anyconnect/bin/vpn, an de Secure Client 5 liwwert et nach ëmmer. Wann den Dienst vpnagentd leeft, liest den -s-Flag Äntwerten aus der Standardagab an der Reihenfolge, an där de Client se freet. Déi Reihenfolge ass iwwer Servere net fest.
E Gruppemenu setzt eng Zeil derbäi. En Loginbanner setzt nach eng derbäi. Eng Token-Ufro no dem Passwuert zerbricht e Skript mat véier Zeilen komplett, well déi fënneft Zeil ni sollt den Token sinn. De Feeler ass roueg: de Client kritt de falsche String, de Verbindungsversuch endet, an de Skript mellt näischt Nëtzles.
Fuert de Client eng Kéier vun Hand géint dee selwechte Gateway an déi selwecht Versioun aus, a schreift d’Uforen an der Reihenfolge op, an där se kommen. Dee Protokoll ass d’Spezifikatioun, déi Äre Skript muss erfëllen.
Op wat de Client waart
Am üblechen eenzelen Gruppfall ass d’Reihenfolge Benotzernumm, Passwuert an heiansdo eng Bannerbestätegung. Déi éischt Zeil vun engem Here-Dokument gëtt nëmmen dann e Menüindeks, wann de Server tatsächlech e Menü weist, an dofir funktionéiert dee selwechte Skript op enger Plaz an deet op der nächster scheieren.
/opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net <<EOF
0
alice
$VPN_PASSWORD
y
EOF
Liest dat als véier Äntwerten op véier méiglech Froen, net als e feste Protokoll. D’Null ass eng Menüauswiel, net e Passwuert, an dat lescht y akzeptéiert e Banner, deen vill Gateways ni schécken.
Benotz expect wann d’Reihenfolge net viraussegbar ass
Wann d’Reihenfolge vun den Uforen ännert, hale si op mat Zeilen zielen a waart amplaz op d’Ufro. En expect-Skript start de Befehl connect, waart op d’Benotzernumm-Ufro, schéckt, waart op d’Passwuert-Ufro, schéckt an daart dono op den ugeschlossenen Zoustand. All Waarde huet säin eegent Zäitlimit.
Behandelt en Zäitlimit als Feeler a gitt eraus. En Skript, deen no enger onerwaarter Ufro weider Input schéckt, tippt d’Passwuert gäre an eng Shell, an e Menü oder an alles anescht, wat just liest. Esou gëtt en Login-Skript en Tëschefall.
expect gëtt Dir och e Protokoll, deen Dir mat ewechgeholltem Geheimnis ka loggen, an dat ass méi wäert wéi den Exit-Code, wann e Gateway no engem Upgrade seng Uforen ännert.
De Geheimnis muss iergendwou wunnen
All Versioun vun dësem Problem deelt eng Schwächt: d’Passwuert muss an enger Form existéieren, déi de Client liese kann. Et als Argument ze ginn, weist et an der Prozesstabelle. Et duerch eng Pipe ze schécken, setzt et dacks an d’Shell-Historie. Béides ka vun aneren lokale Benotzer op engem gedeelte Spronghost gelies ginn.
install -m 600 /dev/null ~/.vpn-secret
umask 077; VPN_PASSWORD=$(cat ~/.vpn-secret) /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net
Eng Datei mam Modus 600 am Besitz vum Kont ass de Minimum, an et ass nach ëmmer e Klartextgeheimnis op der Disk. secret-tool lookup liest aus dem Linux-Schlësselring, an op macOS mécht security find-generic-password -w déi selwecht Aarbecht. Wou d’Organisatioun Zertifikat- oder SAML-Authentifikatioun ënnerstëtzt, huel déi, well e gespäichert Passwuert plus MFA nach ëmmer keen Login ouni Mënsch kann ofschléissen.
Bestätegt den Tunnel, da iwwerhëlt d’Zoumaachen
Verloos Iech net op d’Fehlen vum Feelertext. Freet de Client no sengem Zoustand a kontrolléiert d’Interface getrennt:
/opt/cisco/anyconnect/bin/vpn state
ip -brief address
Den Zoustand sollt Connected liesen, an eng Tunnelinterface sollt eng Adress hunn. Da freet eng Ressource un, déi den Tunnel soll erreechen, well en ugeschlossenen Zoustand ouni Route ass en richtegt Resultat an ee liicht ze iwwersinn.
Trennt mat vpn disconnect, a loosst de Skript, deen den Tunnel gestart huet, d’Zoumaachen iwwerhuelen. Eng gescheitert Aarbecht, déi eng Sessioun oppe léisst, verbraucht eng Lizenzplaz a gesäit fir déi nächst Persoun, déi et probéiert, wéi en Authentifikatiounsproblem aus.
Aarbechtsreihenfolge: bestätegt vpnagentd, hält déi richteg Reihenfolge vun den Uforen fest, wielt Here-Dokument oder expect, hal de Geheimnis aus argv an Historie eraus, iwwerpréift Zoustand an eng Ressource, an trennt da am selwechte Skript.