Ensaluto al Cisco Secure Client el Linux-ŝelo, sen la GUI
Here-dokumento ne estas ensaluta protokolo. Notu la realan ordon de la invitoj, uzu expect kiam ĝi varias, kaj tenu la pasvorton ekster argv kaj la historio.
La kredo estas, ke here-dokumento kun kvar linioj estas kompleta neinteraga ensaluto, kaj ĝi teniĝas ĝuste ĝis la enirejo proponas du grupojn, presas standardon aŭ petas ĵetonon post la pasvorto. Tiam la sama skripto tajpas la pasvorton en menuon, kiu atendis numeron. La komandlinia kliento en Linux estas skriptebla, sed nur se vi donas al ĝi tion, kion ĝi efektive atendas, ne tion, kion supozis la lernilo.
La fiksa here-dokumento estas mito
La Linux-kliento de Cisco instalas malgrandan programon ĉe /opt/cisco/anyconnect/bin/vpn, kaj Secure Client 5 ankoraŭ liveras ĝin. Kiam la servo vpnagentd funkcias, la flago -s legas respondojn de la norma enigo laŭ la ordo, en kiu la kliento petas ilin. Tiu ordo ne estas fiksa inter serviloj.
Grupa menuo aldonas unu linion. Ensaluta standardo aldonas alian. Peto pri ĵetono post la pasvorto tute rompas skripton de kvar linioj, ĉar la kvina linio neniam devis esti la ĵetono. La malsukceso estas silenta: la kliento ricevas la malĝustan signoĉenon, la provo konekti finiĝas, kaj la skripto raportas nenion utilan.
Rulu la klienton permane unufoje kontraŭ la sama enirejo kaj versio, kaj notu la invitojn laŭ la ordo, en kiu ili aperas. Tiu protokolo estas la specifo, kiun via skripto devas plenumi.
Kion la kliento atendas
En la kutima kazo de unu grupo la sinsekvo estas uzantnomo, pasvorto kaj foje konfirmo de standardo. La unua linio de here-dokumento fariĝas menua indekso nur tiam, kiam la servilo efektive montras menuon, kaj tial la sama skripto funkcias en unu loko kaj malsukcesas en la sekva.
/opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net <<EOF
0
alice
$VPN_PASSWORD
y
EOF
Legu tion kiel kvar respondojn al kvar eblaj demandoj, ne kiel fiksan protokolon. La nulo estas menua elekto, ne pasvorto, kaj la fina y akceptas standardon, kiun multaj enirejoj neniam sendas.
Uzu expect kiam la ordo ne estas antaŭvidebla
Kiam la ordo de la invitoj varias, ĉesu kalkuli liniojn kaj atendu la inviton. Skripto expect lanĉas la komandon connect, atendas la inviton pri uzantnomo, sendas, atendas la inviton pri pasvorto, sendas, kaj poste atendas la konektitan staton. Ĉiu atendo havas propran templimon.
Traktu templimon kiel malsukceson kaj eliru. Skripto, kiu daŭre sendas enigon post neatendita invito, volonte tajpos la pasvorton en ŝelon, menuon aŭ ion ajn alian, kio hazarde legas. Tiel ensaluta skripto fariĝas incidento.
expect ankaŭ donas al vi protokolon, kiun vi povas registri kun la sekreto forigita, kaj tio valoras pli ol la elirkodo, kiam enirejo ŝanĝas siajn invitojn post ĝisdatigo.
La sekreto devas loĝi ie
Ĉiu versio de ĉi tiu problemo havas unu malfortecon: la pasvorto devas ekzisti en formo, kiun la kliento povas legi. Transdoni ĝin kiel argumenton elmetas ĝin en la proceza tabelo. Eĥi ĝin tra tubo ofte metas ĝin en la ŝelan historion. Ambaŭ estas legeblaj de aliaj lokaj uzantoj sur komuna saltgastiganto.
install -m 600 /dev/null ~/.vpn-secret
umask 077; VPN_PASSWORD=$(cat ~/.vpn-secret) /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net
Dosiero kun reĝimo 600 posedata de la konto estas la minimumo, kaj ĝi restas sekreto en klara teksto sur la disko. secret-tool lookup legas el la ŝlosilringo de Linux, kaj sur macOS la saman laboron faras security find-generic-password -w. Kie la organizo subtenas atestilan aŭ SAML-aŭtentigon, preferu ĝin, ĉar konservita pasvorto plus MFA ankoraŭ ne povas fini ensaluton sen homo.
Konfirmu la tunelon, poste posedu la malŝaltadon
Ne fidu la foreston de erarteksto. Demandu la klienton pri ĝia stato kaj kontrolu la interfacon sendepende:
/opt/cisco/anyconnect/bin/vpn state
ip -brief address
La stato devus legi Connected, kaj tunela interfaco devus havi adreson. Poste petu unu rimedon, kiun la tunelo devus atingi, ĉar konektita stato sen itinero estas reala rezulto kaj facile preteratentebla.
Malkonektu per vpn disconnect, kaj lasu la skripton, kiu lanĉis la tunelon, preni la malŝaltadon. Malsukcesa tasko, kiu lasas sesion malfermita, konsumas licencan lokon kaj aspektas kiel aŭtentiga problemo al la sekva persono, kiu provas.
Ordo de laboro: konfirmu vpnagentd, kaptu la realan ordon de la invitoj, elektu here-dokumenton aŭ expect, tenu la sekreton ekster argv kaj la historio, kontrolu la staton kaj unu rimedon, kaj poste malkonektu en la sama skripto.