La vpn-kliento, kiu venas kun Cisco AnyConnect, kondutas kiel konversacio: ĝi presas inviton, atendas linion, poste presas la sekvan. Se vi enkondukas tiun konversacion el dosiero aŭ tubo, la sama programo funkcias sen observado. La tekniko estas unu alidirektado plus ordigita listo de respondoj, kaj la listo, ne la alidirektado, decidas ĉu la skripto estas fidinda.

Du aferoj rompas tion en la praktiko. La ordo de la invitoj ŝanĝiĝas kiam pordego demandas ion plian, kaj konservita pasvorto transformas unu tajperaron en kontoŝloson. Traktu la sinsekvon kiel versiitan datumaron, kiun vi povas kompari post ĉiu pordega ŝanĝo. Malsukcesu laŭte anstataŭ reprovi, ĉar iteracio estas ĝuste la maniero, per kiu mistajpita pasvorto fariĝas ŝlosita konto.

Unu sinsekvo, en la ordo, kiun la kliento demandas

Rulu la klienton interage unufoje kaj notu ĉiun inviton en la ordo, en kiu ĝi aperas. Tiu transskribo fariĝas la responda dosiero. Kiam vi alidirektas la dosieron en la programon, la unua linio devas esti la konekta komando mem, tial la sinsekvo komenciĝas per gastigantnomo anstataŭ per uzantnomo.

connect vpn.example.com
0
<username>
<password>
y
exit

La nuda 0 elektas la unuan konektan profilon kiam la pordego proponas liston; uzu tiun indekson, kiun via pordego presas. La y akceptas ensalutan rubandon, do forigu tiun linion se ne estas rubando, kaj enmetu unu kie via pordego faras plian demandon. La fina exit estas tio, kio permesas al la kliento fini pure kiam la lasta respondo estas konsumita.

/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt

La neinteraga reĝimo ĉi tie ne estas laŭvola. Sen -s la kliento povas preni la terminalon kaj ignori alidirektitan enigon; kun ĝi la respondoj estas legataj el la fluo kaj la procezo revenas. Kie la programo bezonas altigitajn privilegiojn, envolvu la alvokon en sudo -n por ke la skripto tuj malsukcesu anstataŭ blokiĝi ĉe pasvorta invito.

Kie la responda dosiero likas

Dosiero enhavanta pasvorton estas akreditaĵo, do donu al ĝi la permesojn de tia: reĝimo 600, posedata de la konto, kiu rulas la taskon, kaj neniam ene de kunhavigita aŭ sinkronigita dosierujo. Kreu ĝin kun la reĝimo jam aplikita anstataŭ ripari ĝin poste, ĉar dosiero estas mallonge legebla de ĉiuj inter la skribo kaj la chmod.

install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config

La alia duono estas argv. Pasvorto transdonita kiel argumento estas videbla al ĉiu loka uzanto, kiu listigas procezojn, kaj ĝi ankaŭ eniras la ŝelan historion. Legu ĝin el dosiera priskribilo aŭ medivariablo anstataŭe, kaj metu la ŝarĝon en citilojn por ke la ŝelo ne povu etendi ion ene de ĝi.

printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
  | sudo -n /opt/cisco/anyconnect/bin/vpn -s

Atentu la citadon. Ene de duoblaj citiloj pasvorto enhavanta ! povas esti etendita de interaga ŝelo antaŭ ol la kliento entute vidas ĝin, kaj la malsukceso alvenas kiel ĝenerala event-not-found-eraro, kiu aspektas kiel protokola problemo.

Pruvu la tunelon, poste fermu ĝin

Konektita stato nur pruvas, ke la kliento kredas havi seancon. Elektu gastiganton, kiu respondas nur el la interna korporacia reto, kaj testu ĝin unufoje antaŭ ol fari ion alian. Malsukceso tie estas enkursiga aŭ politika fuŝo, kaj reruli la ensaluton ne ŝanĝos tion.

/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

Kontrolu la statan eligon antaŭ kaj post la malkonekto. Kliento lasita kun kaduka seanco povas rifuzi la sekvan konekton dum la skripto ankoraŭ raportas sukceson, kaj tiu fiaskmaniero estas nevidebla se vi rigardas nur elirkodojn. Komparu la du legaĵojn anstataŭ fidi la duan sole. Aliasoj en ŝela profilo sufiĉas por ĉiutaga uzo, dum ĉio planita meritas la saman revizion de akreditaĵoj kaj identeco kiel ĉiu alia nerigardata tasko.

Kiam fiksa listo ĉesas esti sekura

Responda dosiero kodas la hodiaŭan ordon de invitoj. Ŝanĝita rubando, deviga pasvorta ŝanĝo aŭ defio pri dua faktoro transformas ĝin en iteracion, kiu povas ŝlosi la konton, tial la skripto devas eliri ĉe la unua neatendita respondo anstataŭ restartigi.

Kaptu tion, kion la kliento presis, redonu ne-nulan staton kaj lasu la alvokanton decidi. Kie la pordego postulas duan faktoron, la honesta respondo estas, ke nerigardata ensaluto ne disponeblas por tiu profilo, ne ke la sinsekvo bezonas ankoraŭ unu linion.

Rotacio apartenas al la sama revizio. Se la akreditaĵo estas konservita, decidiĝu, kiu povas legi ĝin, kiam ĝi ŝanĝiĝas kaj kio forigas ĝin kiam la gastiganto estas rekonstruita. Skripto, kiu funkcias jaron ĉar neniu tuŝis la pasvorton, ne estas dezajno, sed akcidento atendanta rotacian politikon.

Profiloj, kiuj ne estas AnyConnect

Du pli malnovaj Cisco-akreditaĵaj stiloj konfuziĝas kun ĉi tiu. Profilo vpnc petas IPSec ID, kiu fakte estas la grupa nomo, poste grupan sekreton, poste viajn proprajn akreditaĵojn, kaj ĉiuj tri venas de tiu, kiu administras la pordegon. Malnova Cisco IPsec estas alia protokolo ol AnyConnect, do vpnc ne povas atingi servon nur-AnyConnect; openconnect --protocol=anyconnect estas la malferma kliento por tiu tasko.

Dosiero .pcf priskribas la malnovan klientan profilon. La gastiganto, la grupa nomo kaj la grupa pasvorto ene de ĝi povas esti reenmetitaj mane en kliento, kiu parolas Cisco IPsec, kvankam la dosiero ne estas universala importo kaj ajna ne-defaŭta pordo aŭ tunela reĝimo kutime malaperas en la transigo.

Komencu de tio, kion la pordego efektive proponas, poste elektu la klienton, kiu parolas tiun protokolon. Kopii profilon de alia retejo estas la maniero, per kiu homoj finas senerarigante akreditaĵojn, kiuj neniam estis la problemo.

Rilataj artikoloj