Ang vpn client na kasama ng Cisco AnyConnect ay kumikilos na parang usapan: nagpi-print ng prompt, naghihintay ng isang linya, at pagkatapos ay nagpi-print ng susunod. Kung pakakainin mo ang usapang iyon mula sa file o pipe, ang parehong binary ay tumatakbo nang walang pagmamatyag. Ang pamamaraan ay isang redirect at isang nakaayos na listahan ng mga sagot, at ang listahan, hindi ang redirect, ang nagpapasya kung mapagkakatiwalaan ang script.

Dalawang bagay ang sumisira nito sa praktika. Nagbabago ang pagkakasunod-sunod ng mga prompt kapag may tinanong na dagdag ang gateway, at ang naka-store na password ay ginagawang account lockout ang isang typo. Ituring ang sequence bilang bersyonadong data na maihahambing mo pagkatapos ng bawat pagbabago sa gateway. Bumagsak nang malakas sa halip na mag-ulit, dahil ang loop ang eksaktong paraan kung paano nagiging naka-lock na account ang maling na-type na password.

Isang sequence, sa pagkakasunod-sunod na itinatanong ng client

Patakbuhin ang client nang interactive nang isang beses at isulat ang bawat prompt sa pagkakasunod-sunod na lumalabas. Ang transcript na iyon ang magiging file ng mga sagot. Kapag ini-redirect mo ang file sa binary, ang unang linya ay dapat ang mismong command ng koneksyon, kaya nagsisimula ang sequence sa hostname kaysa username.

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

Ang hubad na 0 ay pumipili ng unang profile ng koneksyon kapag nag-aalok ng listahan ang gateway; gamitin ang index na ipiniprint ng iyong gateway. Tumatanggap ang y ng login banner, kaya tanggalin ang linyang iyon kung walang banner at magsingit ng isa sa lugar kung saan may dagdag na tanong ang gateway mo. Ang exit sa dulo ang nagpapahintulot sa client na magtapos nang malinis kapag naubos na ang huling sagot.

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

Ang non-interactive mode dito ay hindi opsyonal. Kung walang -s maaaring sakupin ng client ang terminal at balewalain ang na-redirect na input; kasama nito, binabasa ang mga sagot mula sa stream at bumabalik ang proseso. Kung saan kailangan ng binary ng mas mataas na pribilehiyo, balutin ang tawag sa sudo -n upang agad na mabigo ang script kaysa mag-hang sa prompt ng password.

Saan tumatagas ang file ng mga sagot

Ang file na may password ay isang kredensyal, kaya bigyan ito ng mga pahintulot ng isa: mode 600, pagmamay-ari ng account na nagpapatakbo ng trabaho, at hindi kailanman nasa loob ng shared o naka-sync na direktoryo. Gumawa nito nang nakapasok na ang mode sa halip na ayusin ito pagkatapos, dahil ang file ay panandaliang nababasa ng lahat sa pagitan ng pagsulat at ng chmod.

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

Ang kabilang kalahati ay argv. Ang password na ipinasa bilang argumento ay nakikita ng bawat lokal na user na naglilista ng mga proseso, at napupunta rin ito sa kasaysayan ng shell. Basahin ito mula sa file descriptor o environment variable sa halip, at ilagay ang payload sa mga quote upang walang maipalawak ng shell sa loob nito.

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

Mag-ingat sa mga quote. Sa loob ng dobleng quote, ang password na may ! ay maaaring palawakin ng interactive na shell bago pa ito makita ng client, at ang pagpalya ay dumarating bilang pangkalahatang event-not-found error na mukhang problema sa protocol.

Patunayan ang tunnel, pagkatapos isara ito

Ang naka-konektang estado ay nagpapatunay lamang na naniniwala ang client na mayroon itong session. Pumili ng host na sumasagot lamang mula sa loob ng corporate network at subukan ito nang isang beses bago gumawa ng anupaman. Ang pagpalya doon ay depekto sa routing o patakaran, at ang muling pagpapatakbo ng login ay hindi iyon mababago.

/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

Suriin ang output ng estado bago at pagkatapos ng disconnect. Ang client na naiwan na may lumang session ay maaaring tumanggi sa susunod na koneksyon habang nag-uulat pa rin ng tagumpay ang script, at ang failure mode na iyon ay hindi nakikita kung tinitingnan mo lamang ang mga exit code. Ihambing ang dalawang pagbasa sa halip na magtiwala sa pangalawa nang nag-iisa. Ang mga alias sa isang shell profile ay sapat para sa araw-araw na paggamit, ngunit ang anumang naka-iskedyul ay karapat-dapat sa parehong pagsusuri ng kredensyal at pagkakakilanlan gaya ng anumang iba pang trabahong walang pagmamatyag.

Kapag ang isang fixed na listahan ay hindi na ligtas

Ang file ng mga sagot ay nagko-code ng pagkakasunod-sunod ng prompt ngayon. Ang nabagong banner, sapilitang pagbabago ng password o hamon ng ikalawang factor ay ginagawa itong loop na maaaring mag-lock ng account, kaya dapat lumabas ang script sa unang hindi inaasahang sagot kaysa mag-restart.

Hulihin ang ipinrint ng client, ibalik ang di-zero na status at hayaang magpasya ang tumatawag. Kung saan hinihingi ng gateway ang ikalawang factor, ang tapat na sagot ay hindi available ang login na walang pagmamatyag para sa profile na iyon, hindi na kailangan ng isa pang linya ang sequence.

Ang rotation ay kabilang sa parehong pagsusuri. Kung naka-store ang kredensyal, magpasya kung sino ang makakabasa nito, kailan ito nagbabago at ano ang nag-aalis nito kapag itinayo muli ang host. Ang script na gumagana nang isang taon dahil walang humawak sa password ay hindi disenyo, ito ay aksidente na naghihintay ng patakaran sa rotation.

Mga profile na hindi AnyConnect

Dalawang mas lumang estilo ng kredensyal ng Cisco ang napagkakamalang ito. Ang profile na vpnc ay humihingi ng IPSec ID, na sa totoo ay pangalan ng grupo, pagkatapos ay group secret, pagkatapos ay ang sarili mong kredensyal, at ang tatlo ay mula sa nagpapatakbo ng gateway. Ang legacy na Cisco IPsec ay ibang protocol kaysa AnyConnect, kaya hindi maabot ng vpnc ang serbisyong AnyConnect lamang; ang openconnect --protocol=anyconnect ang bukas na client para sa trabahong iyon.

Ang file na .pcf ay naglalarawan ng mas lumang profile ng client. Ang host, pangalan ng grupo at group password sa loob nito ay maaaring muling ilagay nang manu-mano sa client na nagsasalita ng Cisco IPsec, kahit na ang file ay hindi universal import at anumang di-default na port o tunneling mode ay karaniwang nawawala sa paglilipat.

Magsimula sa aktwal na inaalok ng gateway, pagkatapos ay piliin ang client na nagsasalita ng protocol na iyon. Ang pagkopya ng profile mula sa ibang site ang paraan kung paano napupunta ang mga tao sa pag-debug ng mga kredensyal na hindi kailanman naging problema.

Kaugnay na mga artikulo