Ang paniniwala ay ang here-document na may apat na linya ay kumpletong di-interaktibong pag-login, at nananatili ito hanggang mag-alok ang gateway ng dalawang grupo, mag-print ng banner, o humingi ng token pagkatapos ng password. Pagkatapos ay ipinapasok ng parehong script ang password sa isang menu na naghihintay ng numero. Ang command-line client sa Linux ay maiiskrip, ngunit kung ibibigay mo lamang ang aktuwal nitong hinihintay, hindi ang inakala ng tutorial.

Ang fixed na here-document ay isang alamat

Ang Linux client ng Cisco ay naglalagay ng maliit na programa sa /opt/cisco/anyconnect/bin/vpn, at ipinapadala pa rin ito ng Secure Client 5. Habang tumatakbo ang serbisyong vpnagentd, binabasa ng -s flag ang mga sagot mula sa standard input sa pagkakasunod-sunod na hinihingi ng client. Hindi fixed ang pagkakasunod-sunod na iyon sa pagitan ng mga server.

Ang menu ng grupo ay nagdadagdag ng isang linya. Ang banner ng pag-login ay nagdadagdag ng isa pa. Ang paghingi ng token pagkatapos ng password ay tuluyang sumisira sa script na may apat na linya, dahil ang ikalimang linya ay hindi kailanman magiging token. Tahimik ang pagkabigo: natatanggap ng client ang maling string, nagtatapos ang pagtatangkang kumonekta, at walang kapaki-pakinabang na iniuulat ang script.

Patakbuhin ang client nang manu-mano nang isang beses laban sa parehong gateway at bersyon, at isulat ang mga prompt sa pagkakasunod-sunod ng paglitaw. Ang transcript na iyon ang spesipikasyong dapat tuparin ng iyong script.

Ano ang hinihintay ng client

Sa karaniwang kaso ng isang grupo, ang pagkakasunod-sunod ay username, password at kung minsan ay kumpirmasyon ng banner. Ang unang linya ng here-document ay nagiging menu index lamang kapag tunay na nagpapakita ng menu ang server, kaya gumagana ang parehong script sa isang lugar at nabigo sa susunod.

/opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net <<EOF
0
alice
$VPN_PASSWORD
y
EOF

Basahin ito bilang apat na sagot sa apat na posibleng tanong, hindi bilang fixed na protocol. Ang sero ay pagpili sa menu, hindi password, at ang y sa dulo ay tumatanggap ng banner na hindi kailanman ipinapadala ng maraming gateway.

Gamitin ang expect kapag hindi mahulaan ang pagkakasunod-sunod

Kapag nagbabago ang pagkakasunod-sunod ng prompt, itigil ang pagbilang ng linya at hintayin na lang ang prompt. Ang expect script ay naglulunsad ng connect command, naghihintay ng username prompt, nagpapadala, naghihintay ng password prompt, nagpapadala, at pagkatapos ay naghihintay ng konektadong estado. May sariling timeout ang bawat paghihintay.

Ituring ang timeout bilang pagkabigo at lumabas. Ang script na patuloy na nagpapadala ng input pagkatapos ng hindi inaasahang prompt ay masayang magta-type ng password sa isang shell, menu o anumang iba pang nagbabasa. Ganoon nagiging insidente ang isang login script.

Nagbibigay din ang expect ng transcript na maaari mong i-log nang tinanggal ang lihim, at mas mahalaga iyon kaysa exit code kapag binago ng gateway ang mga prompt nito pagkatapos ng upgrade.

Kailangang tumira ng lihim sa isang lugar

Bawat bersyon ng problemang ito ay may isang kahinaan: kailangang umiral ang password sa anyong mababasa ng client. Ang pagpasa nito bilang argumento ay naglalantad nito sa process table. Ang pag-echo nito sa pamamagitan ng pipe ay kadalasang naglalagay nito sa shell history. Pareho itong nababasa ng ibang lokal na user sa shared jump host.

install -m 600 /dev/null ~/.vpn-secret
umask 077; VPN_PASSWORD=$(cat ~/.vpn-secret) /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net

Ang file na may mode 600 na pag-aari ng account ay ang pinakamababa, at ito ay lihim pa ring plaintext sa disk. Ang secret-tool lookup ay nagbabasa mula sa keyring ng Linux, at sa macOS ang parehong gawain ay ginagawa ng security find-generic-password -w. Kung saan sinusuportahan ng organisasyon ang certificate o SAML authentication, piliin iyon, dahil ang naka-store na password at MFA ay hindi pa rin makakumpleto ng login nang walang tao.

Kumpirmahin ang tunnel, pagkatapos ay angkinin ang pagtanggal

Huwag magtiwala sa kawalan ng error text. Tanungin ang client tungkol sa estado nito at suriin ang interface nang hiwalay:

/opt/cisco/anyconnect/bin/vpn state
ip -brief address

Dapat basahin ng estado ang Connected, at dapat may address ang tunnel interface. Pagkatapos ay humingi ng isang resource na dapat maabot ng tunnel, dahil ang konektadong estado na walang ruta ay tunay na kinalabasan at madaling makaligtaan.

Dumiskonekta gamit ang vpn disconnect, at hayaang ang script na naglunsad ng tunnel ang mangasiwa sa pagtanggal. Ang nabigong trabaho na nag-iiwan ng bukas na session ay kumakain ng lisensya at mukhang problema sa authentication sa susunod na susubok.

Pagkakasunod-sunod ng trabaho: kumpirmahin ang vpnagentd, itala ang tunay na pagkakasunod-sunod ng prompt, piliin ang here-document o expect, ilayo ang lihim sa argv at kasaysayan, suriin ang estado at isang resource, pagkatapos ay dumiskonekta sa parehong script.

Kaugnay na mga artikulo