Ìgbàgbọ́ ni pé here-document pẹ̀lú ìlà mẹ́rin jẹ́ ìwọlé kíkún tí kì í ṣe ìbáraẹnisọ̀rọ̀, yóò sì dúró títí gateway yóò fi pèsè ẹ̀ka méjì, tẹ banner jáde, tàbí béèrè token lẹ́yìn ọ̀rọ̀ ìpamọ́. Nígbà náà script kan náà yóò kọ ọ̀rọ̀ ìpamọ́ sínú menu tí ó ń retí nọ́mbà. Command-line client lórí Linux lè jẹ́ script, ṣùgbọ́n kìkì bí o bá fún un ní ohun tí ó ń retí gan-an, kì í ṣe ohun tí ìtọ́sọ́nà rò.

here-document tí ó dúró ṣinṣin jẹ́ ìtàn àròsọ

Client Linux ti Cisco ń fi kún ọ̀nà tí ó wà ní /opt/cisco/anyconnect/bin/vpn, Secure Client 5 sì ṣì ń fi í ránṣẹ́. Nígbà tí iṣẹ́ vpnagentd ń ṣiṣẹ́, àmì -s ń ka àwọn ìdáhùn láti stdin ní ìtòlẹ́sẹẹsẹ tí client béèrè wọn. Ìtòlẹ́sẹẹsẹ yẹn kò dúró ṣinṣin láàrín àwọn server.

Menu ẹ̀ka ń fi ìlà kan kún. Banner ìwọlé ń fi òmíràn kún. Ìbéèrè token lẹ́yìn ọ̀rọ̀ ìpamọ́ ń fọ́ script ìlà mẹ́rin pátápátá, nítorí ìlà kárùn-ún kò ní jẹ́ token rárá. Ìkùnà náà dákẹ́: client gba okùn tí kò tọ́, ìgbìyànjú ìsopọ̀ parí, script kò sì jábọ̀ ohunkóhun tí ó wúlò.

Ṣe client náà lọ́wọ́ lẹ́ẹ̀kan sí gateway àti ẹ̀yà kan náà, kí o sì kọ àwọn ìbéèrè ní ìtòlẹ́sẹẹsẹ tí wọ́n fi hàn. Àkọsílẹ̀ yẹn ni àpèjúwe tí script rẹ gbọdọ̀ ṣe.

Ohun tí client ń retí

Nínú ọ̀ràn ẹ̀ka kan tí ó wọ́pọ̀, ìtòlẹ́sẹẹsẹ ni orúkọ olùlò, ọ̀rọ̀ ìpamọ́ àti nígbà míràn ìjẹ́rìí banner. Ìlà àkọ́kọ́ here-document yóò di àtọ́ka menu kìkì nígbà tí server bá fi menu hàn gan-an, ìdí nìyẹn tí script kan náà fi ṣiṣẹ́ ní ibi kan tí yóò sì kùnà ní ibi tó tẹ̀lé.

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

Ka èyí gẹ́gẹ́ bí ìdáhùn mẹ́rin sí ìbéèrè mẹ́rin tí ó ṣeé ṣe, kì í ṣe ìlànà tí ó dúró ṣinṣin. Odo jẹ́ àṣàyàn menu, kì í ṣe ọ̀rọ̀ ìpamọ́, y sì ní ìparí gba banner tí ọ̀pọ̀ gateway kì í fi ránṣẹ́ rárá.

Lo expect nígbà tí ìtòlẹ́sẹẹsẹ kò ṣeé sọ tẹ́lẹ̀

Nígbà tí ìtòlẹ́sẹẹsẹ ìbéèrè bá yí padà, jáwọ́ kíkà ìlà kí o sì dúró de ìbéèrè. Script expect ń bẹ̀rẹ̀ àṣẹ connect, ó ń dúró de ìbéèrè orúkọ olùlò, ó ń ránṣẹ́, ó ń dúró de ìbéèrè ọ̀rọ̀ ìpamọ́, ó ń ránṣẹ́, ó sì ń dúró de ipò ìsopọ̀. Ìdúró kọ̀ọ̀kan ní àkókò ìparí tirẹ̀.

Ka àkókò ìparí gẹ́gẹ́ bí ìkùnà kí o sì jáde. Script tí ó ń tẹ̀síwájú láti rán input lẹ́yìn ìbéèrè àìròtẹ́lẹ̀ yóò fi ìdùnnú kọ ọ̀rọ̀ ìpamọ́ sínú shell, menu tàbí ohunkóhun míràn tí ó ń kà. Bẹ́ẹ̀ ni script ìwọlé ṣe di ìṣẹ̀lẹ̀.

Expect tún fún ọ ní àkọsílẹ̀ tí o lè gbà pẹ̀lú ìkọ̀kọ̀ tí a yọ kúrò, èyí sì níye lórí ju kóòdù ìjáde lọ nígbà tí gateway bá yí àwọn ìbéèrè rẹ̀ padà lẹ́yìn ìgbéga.

Ìkọ̀kọ̀ gbọdọ̀ gbé ibìkan

Ẹ̀yà kọ̀ọ̀kan ti ìṣòro yìí ní àìlera kan: ọ̀rọ̀ ìpamọ́ gbọdọ̀ wà ní ìrísí tí client lè kà. Gbígbé e gẹ́gẹ́ bí argument ń fi í hàn nínú tábìlì àwọn ìlànà. Sísọ ọ́ jáde nípasẹ̀ pipe sábà máa ń fi í sínú ìtàn shell. Àwọn méjèèjì ni àwọn olùlò àdúgbò míràn lè kà lórí jump host tí a pín.

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

Fáìlì pẹ̀lú ipò 600 tí àkọsílẹ̀ ni ni ìkẹ́yìn, ó sì ṣì jẹ́ ìkọ̀kọ̀ ọ̀rọ̀ tààrà lórí disiki. secret-tool lookup ń kà láti keyring Linux, lórí macOS iṣẹ́ kan náà ni security find-generic-password -w ń ṣe. Níbi tí àjọ bá ti ń ṣe àtìlẹ́yìn ìjẹ́rìí pẹ̀lú certificate tàbí SAML, yan èyí, nítorí ọ̀rọ̀ ìpamọ́ tí a fipamọ́ pẹ̀lú MFA kò lè parí ìwọlé láìsí ènìyàn.

Jẹ́rìí tunnel, kí o sì gba ìgéwọ́n

Má ṣe gbẹ́kẹ̀ lé àìsí ọ̀rọ̀ àṣìṣe. Béèrè ipò rẹ̀ lọ́wọ́ client kí o sì yẹ interface wò lọ́nà àdádúró:

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

Ipò náà gbọdọ̀ kà bí Connected, interface tunnel sì gbọdọ̀ ní àdírẹ́sì. Lẹ́yìn náà béèrè ohun àmúṣọrọ̀ kan tí tunnel gbọdọ̀ dé, nítorí ipò ìsopọ̀ láìsí ọ̀nà jẹ́ àbájáde gidi tí ó sì rọrùn láti pàdánù.

Gé kúrò pẹ̀lú vpn disconnect, kí script tí ó bẹ̀rẹ̀ tunnel gba ìgéwọ́n. Iṣẹ́ tí ó kùnà tí ó fi session sílẹ̀ ní ṣíṣí ń jẹ ààyè ìwé-àṣẹ, yóò sì dàbí ìṣòro ìjẹ́rìí fún ẹni tó kàn tí yóò gbìyànjú.

Ìtòlẹ́sẹẹsẹ iṣẹ́: jẹ́rìí vpnagentd, ṣàkọsílẹ̀ ìtòlẹ́sẹẹsẹ ìbéèrè gidi, yan here-document tàbí expect, pa ìkọ̀kọ̀ mọ́ kúrò nínú argv àti ìtàn, yẹ ipò àti ohun àmúṣọrọ̀ kan wò, lẹ́yìn náà gé kúrò nínú script kan náà.

Àwọn àpilẹ̀kọ tó jọra