AnyConnect op Linux: de oanmeldsekwinsje feilich skripte
De AnyConnect vpn-binêre lêst antwarten fan stdin, en dat is genôch foar in werhelber oanmelden. Bou de sekwinsje, beskermje it bestân, ferifiearje en stop.
De vpn-klient dy't mei Cisco AnyConnect komt, hâldt him as in petear: hy printsjet in oanwizing, wachtet op in rigel en printsjet dan de folgjende. Fied dat petear yn út in bestân of in buis en deselde binêre rint sûnder tafersjoch. De technyk is ien omlieding plus in oardere list fan antwarten, en it is de list, net de omlieding, dy't beslút oft it skript betrouber is.
Twa dingen brekke dat yn de praktyk. De folchoarder fan de oanwizings ferskoot as in gateway wat ekstra freget, en in bewarre wachtwurd makket fan ien typflater in accountblokkade. Behannelje de sekwinsje as ferzjonearre gegevens dy't jo nei elke gateway-wiziging fergelykje kinne. Fal lûd op ynstee fan opnij te besykjen, want in loop is krekt de manier wêrop in ferkeard typt wachtwurd in beskoattele account wurdt.
Ien sekwinsje, yn de folchoarder dy't de klient freget
Rin de klient ien kear ynteraktyf en skriuw elke oanwizing op yn de folchoarder wêryn't se ferskine. Dat transkript wurdt it antwurbestân. As jo it bestân yn de binêre omliede, moat de earste rigel de ferbiningsopdracht sels wêze, dêrom begjint de sekwinsje mei in hostnamme ynstee fan in brûkersnamme.
connect vpn.example.com
0
<username>
<password>
y
exit
De keale 0 selektearret it earste ferbiningsprofyl as de gateway in list biedt; brûk de yndeks dy't jo gateway printsjet. De y akseptearret in oanmeldbanner, dus wiskje dy rigel as der gjin banner is en foegje ien yn wêr't jo gateway in ekstra fraach stelt. De exit oan de ein is wat de klient kreas stopje lit as it lêste antwurd ferbrûkt is.
/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt
De net-ynteraktive modus is hjir net opsjoneel. Sûnder -s kin de klient de terminal oernimme en omlette yngong negearje; dermei wurde de antwarten fan de stream lêzen en komt it proses werom. Wêr't de binêre ferhege privileezjes nedich hat, wikselje de oanrop yn sudo -n, sadat it skript daliks falt ynstee fan te blokkearjen op in wachtwurdoanfreg.
Wêr't it antwurbestân lekt
In bestân mei in wachtwurd is in legitimasje, dus jou it de rjochten fan ien: modus 600, eigendom fan it account dat de taak rint, en nea yn in dield of syngronisearre map. Meitsje it oan mei de modus al tapast ynstee fan it efterôf te reparearjen, want in bestân is koart foar elkenien lêsber tusken it skriuwen en de chmod.
install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config
De oare helte is argv. In wachtwurd dat as argumint trochjûn wurdt is sichtber foar elke lokale brûker dy't prosessen listet, en it bedarret ek yn de shell-skiednis. Lês it ynstee út in bestânbeskriuwer of in omjouwingsfariabele, en set de lading yn oanhellingstekens sadat de shell neat binnenyn útwreidzje kin.
printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
| sudo -n /opt/cisco/anyconnect/bin/vpn -s
Pas op mei de oanhellingstekens. Binnen dûbele oanhellingstekens kin in wachtwurd mei ! troch in ynteraktive shell útwreide wurde foardat de klient it ea sjocht, en de flater komt as in generike event-not-found-flater dy't der as in protokolprobleem útsjocht.
Bewiis de tunnel, slút him dan
In ferbûne steat bewiist allinnich dat de klient mient dat er in sesje hat. Kies in host dy't allinnich fan binnen it bedriuwsnetwurk antwurdet en test him ien kear foardat jo wat oars dogge. In flater dêr is in routing- of beliedsflater, en it oanmelden opnij rinne litte sil dat net feroarje.
/opt/cisco/anyconnect/bin/vpn state
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 10 https://<internal-host>/
/opt/cisco/anyconnect/bin/vpn disconnect
Kontrolearje de steat-útfier foar en nei it ferbrekken. In klient dy't mei in ferâldere sesje efterlitten wurdt, kin de folgjende ferbining wegerje wylst it skript noch sukses rapportearret, en dy flatermodus is ûnsichtber as jo allinnich nei útgeanskoades sjogge. Fergelykje de twa lêzingen ynstee fan op de twadde allinnich te fertrouwen. Aliasen yn in shell-profyl binne genôch foar deistich gebrûk, wylst alles wat pland is deselde beoardieling fan legitimasjes en identiteit fertsjinnet as hokker oare taak sûnder tafersjoch.
Wannear't in fêste list net mear feilich is
In antwurbestân kodearret de oanwizingsfolchoarder fan hjoed. In feroare banner, in twongen wachtwurferskowing of in twadde-faktor-útdaging meitsje der in loop fan dy't it account blokkearje kin, dêrom moat it skript by it earste ûnferwachte antwurd útgean ynstee fan opnij te starten.
Fang wat de klient printsjet hat, jou in status oars as nul werom en lit de oanropper beslisse. Wêr't de gateway in twadde faktor easket, is it earlike antwurd dat in oanmelding sûnder tafersjoch foar dat profyl net beskikber is, net dat de sekwinsje noch ien rigel nedich hat.
Rotaasje heart by deselde beoardieling. As de legitimasje bewarre wurdt, beslút dan wa't it lêze mei, wannear't it feroaret en wat it fuorthellet as de host wer opboud wurdt. In skript dat in jier wurket om't nimmen it wachtwurd oanrekke hat, is gjin ûntwerp, mar in ûngelok dat op in rotaasjebelied wachtet.
Profylen dy't gjin AnyConnect binne
Twa âldere Cisco-legitimasjestilen wurde mei dizze ferwiksele. In vpnc-profyl freget om in IPSec ID, dat eins de groepsnamme is, dan in groepsgeheim, dan jo eigen legitimasjes, en alle trije komme fan wa't de gateway beheart. Legacy Cisco IPsec is in oar protokol as AnyConnect, dus vpnc kin gjin tsjinst berikke dy't allinnich AnyConnect is; openconnect --protocol=anyconnect is de iepen klient foar dat wurk.
In .pcf-bestân beskriuwt it âldere klientprofyl. De host, de groepsnamme en it groepswachtwurd deryn kinne mei de hân opnij ynfierd wurde yn in klient dy't Cisco IPsec sprekt, hoewol it bestân gjin universele ymport is en elke net-standert poarte of tunnelmodus ornaris yn de oerdracht ferdwynt.
Begjin by wat de gateway wier biedt, kies dan de klient dy't dat protokol sprekt. In profyl fan in oare side kopiearje is hoe't minsken einigje mei it debuggen fan legitimasjes dy't nea it probleem wiene.