Linux లో AnyConnect: లాగిన్ క్రమాన్ని సురక్షితంగా స్క్రిప్ట్ చేయడం
Cisco AnyConnect యొక్క vpn బైనరీ stdin నుండి సమాధానాలను చదువుతుంది, పునరావృతమయ్యే లాగిన్కు అదే సరిపోతుంది. క్రమాన్ని నిర్మించి, ఫైల్ను రక్షించి, ధృవీకరించి ఆపండి.
Cisco AnyConnect తో వచ్చే vpn క్లయింట్ సంభాషణ లాగా ప్రవర్తిస్తుంది: ఒక ప్రాంప్ట్ ముద్రిస్తుంది, ఒక లైన్ కోసం వేచి ఉంటుంది, తర్వాత తదుపరిది ముద్రిస్తుంది. ఆ సంభాషణను ఫైల్ లేదా పైపు నుండి ఇచ్చినట్లయితే అదే బైనరీ పర్యవేక్షణ లేకుండా నడుస్తుంది. పద్ధతి ఒక పునఃనిర్దేశం మరియు క్రమబద్ధమైన సమాధానాల జాబితా, మరియు స్క్రిప్ట్ నమ్మదగినదా అనేది పునఃనిర్దేశం కాదు, ఆ జాబితాయే నిర్ణయిస్తుంది.
ఆచరణలో రెండు విషయాలు దీన్ని విరుస్తాయి. గేట్వే ఏదైనా అదనంగా అడిగినప్పుడు ప్రాంప్ట్ల క్రమం మారుతుంది, మరియు నిల్వ చేసిన పాస్వర్డ్ ఒక టైపింగ్ పొరపాటును ఖాతా లాక్అవుట్గా మారుస్తుంది. క్రమాన్ని వెర్షన్ చేసిన డేటాగా చూడండి, గేట్వే మార్పు తర్వాత పోల్చవచ్చు. మళ్లీ ప్రయత్నించడం బదులు గట్టిగా విఫలమవ్వండి, ఎందుకంటే తప్పుగా టైప్ చేసిన పాస్వర్డ్ లాక్ అయిన ఖాతా అయ్యే మార్గం లూప్యే.
ఒక క్రమం, క్లయింట్ అడిగే క్రమంలోనే
క్లయింట్ను ఒకసారి పరస్పర రీతిలో అమలు చేసి ప్రతి ప్రాంప్ట్ను అది కనిపించే క్రమంలో రాయండి. ఆ ప్రతిరూపమే సమాధాన-ఫైల్ అవుతుంది. ఫైల్ను బైనరీకి పునఃనిర్దేశించినప్పుడు మొదటి లైన్ కనెక్షన్ ఆదేశమే ఉండాలి, అందుకే క్రమం వినియోగదారు పేరుతో కాకుండా హోస్ట్ పేరుతో ప్రారంభమవుతుంది.
connect vpn.example.com
0
<username>
<password>
y
exit
బేర్ 0 గేట్వే జాబితా ఇచ్చినప్పుడు మొదటి కనెక్షన్ ప్రొఫైల్ను ఎంచుకుంటుంది; మీ గేట్వే ముద్రించే సూచికను ఉపయోగించండి. y లాగిన్ బ్యానర్ను అంగీకరిస్తుంది, కాబట్టి బ్యానర్ లేకపోతే ఆ లైన్ తొలగించి, మీ గేట్వే అదనపు ప్రశ్న అడిగే చోట ఒక లైన్ చేర్చండి. చివరన exit చివరి సమాధానం వినియోగించబడిన తర్వాత క్లయింట్ శుభ్రంగా ముగియడానికి అనుమతిస్తుంది.
/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txt
ఇక్కడ పరస్పర రహిత మోడ్ ఐచ్ఛికం కాదు. -s లేకుండా క్లయింట్ టెర్మినల్ను ఆక్రమించి పునఃనిర్దేశిత ఇన్పుట్ను నిర్లక్ష్యం చేయవచ్చు; దానితో సమాధానాలు స్ట్రీమ్ నుండి చదవబడతాయి మరియు ప్రక్రియ తిరిగి వస్తుంది. బైనరీకి ఉన్నత అనుమతులు అవసరమైన చోట పిలుపును sudo -n లో చుట్టండి, అప్పుడు స్క్రిప్ట్ పాస్వర్డ్ ప్రాంప్ట్పై నిలిచిపోకుండా వెంటనే విఫలమవుతుంది.
సమాధాన-ఫైల్ ఎక్కడ లీక్ అవుతుంది
పాస్వర్డ్ ఉన్న ఫైల్ ఒక క్రెడెన్షియల్, కాబట్టి దానికి క్రెడెన్షియల్ అనుమతులు ఇవ్వండి: మోడ్ 600, పనిని నడిపే ఖాతా యాజమాన్యంలో, మరియు ఎప్పుడూ పంచుకున్న లేదా సమకాలీకరించిన డైరెక్టరీలో ఉండకూడదు. తర్వాత సరిచేయడం బదులు మోడ్ ఇప్పటికే వర్తింపజేసి సృష్టించండి, ఎందుకంటే రాయడం మరియు chmod మధ్య ఫైల్ కొద్దిసేపు అందరూ చదవగలిగేదిగా ఉంటుంది.
install -m 600 /dev/null ~/.config/anyconnect.txt
chmod 700 ~/.config
మిగిలిన సగం argv. ఆర్గ్యుమెంట్గా ఇచ్చిన పాస్వర్డ్ ప్రక్రియలను జాబితా చేసే ప్రతి స్థానిక వినియోగదారుకు కనిపిస్తుంది, మరియు షెల్ చరిత్రలోకి కూడా చేరుతుంది. దానికి బదులు ఫైల్ డిస్క్రిప్టర్ లేదా పర్యావరణ చరం నుండి చదవండి, మరియు లోడ్ను కోట్లలో ఉంచండి, తద్వారా షెల్ లోపల ఏదీ విస్తరించలేదు.
printf '%s\n' 'connect vpn.example.com' '0' "$VPN_USER" "$VPN_PASS" 'y' 'exit' \
| sudo -n /opt/cisco/anyconnect/bin/vpn -s
కోట్లపై శ్రద్ధ పెట్టండి. డబుల్ కోట్లలో ! ఉన్న పాస్వర్డ్ క్లయింట్ చూసే ముందే పరస్పర షెల్ ద్వారా విస్తరించబడవచ్చు, మరియు వైఫల్యం ప్రోటోకాల్ సమస్యలా కనిపించే సాధారణ event-not-found లోపంగా వస్తుంది.
టన్నెల్ను నిరూపించి, తర్వాత మూయండి
కనెక్ట్ అయిన స్థితి క్లయింట్ సెషన్ ఉందని నమ్ముతున్నట్లు మాత్రమే నిరూపిస్తుంది. కార్పొరేట్ నెట్వర్క్ లోపలి నుండి మాత్రమే స్పందించే హోస్ట్ను ఎంచుకుని, మరేదైనా చేసే ముందు ఒకసారి పరీక్షించండి. అక్కడ వైఫల్యం రూటింగ్ లేదా విధాన లోపం, మరియు లాగిన్ మళ్లీ నడిపినా అది మారదు.
/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
డిస్కనెక్ట్ ముందు మరియు తర్వాత స్థితి అవుట్పుట్ను తనిఖీ చేయండి. పాత సెషన్తో వదిలేయబడిన క్లయింట్ తదుపరి కనెక్షన్ను తిరస్కరించవచ్చు, అయితే స్క్రిప్ట్ ఇంకా విజయాన్ని నివేదిస్తుంది, మరియు నిష్క్రమణ కోడ్లను మాత్రమే చూస్తే ఈ వైఫల్య విధానం కనిపించదు. రెండవ పఠనాన్ని మాత్రమే నమ్మడం బదులు రెండింటినీ పోల్చండి. షెల్ ప్రొఫైల్లోని అలియాస్లు రోజువారీ వినియోగానికి సరిపోతాయి, కానీ షెడ్యూల్ చేసిన ఏదైనా ఇతర పర్యవేక్షణ లేని పనిలాగే అదే క్రెడెన్షియల్ మరియు గుర్తింపు సమీక్షకు అర్హమైనది.
స్థిర జాబితా సురక్షితం కానప్పుడు
సమాధాన-ఫైల్ నేటి ప్రాంప్ట్ క్రమాన్ని ఎన్కోడ్ చేస్తుంది. మారిన బ్యానర్, బలవంతపు పాస్వర్డ్ మార్పు లేదా రెండవ కారక సవాలు దాన్ని ఖాతాను లాక్ చేయగల లూప్గా మారుస్తాయి, కాబట్టి స్క్రిప్ట్ మళ్లీ ప్రారంభించడం బదులు మొదటి ఊహించని సమాధానం వద్ద నిష్క్రమించాలి.
క్లయింట్ ముద్రించినది పట్టుకోండి, సున్నా కాని స్థితిని తిరిగి ఇవ్వండి మరియు నిర్ణయాన్ని పిలిచిన వారికి వదిలేయండి. గేట్వే రెండవ కారకాన్ని కోరే చోట, నిజాయితీ సమాధానం ఆ ప్రొఫైల్కు పర్యవేక్షణ లేని లాగిన్ అందుబాటులో లేదు అనేది, క్రమానికి ఇంకొక లైన్ కావాలని కాదు.
రొటేషన్ కూడా అదే సమీక్షలో భాగం. క్రెడెన్షియల్ నిల్వ చేయబడితే, దాన్ని ఎవరు చదవగలరు, ఎప్పుడు మారుతుంది, హోస్ట్ పునర్నిర్మించినప్పుడు దాన్ని ఏది తొలగిస్తుంది అని నిర్ణయించండి. ఎవరూ పాస్వర్డ్ను తాకనందున ఏడాది పాటు నడిచే స్క్రిప్ట్ రూపకల్పన కాదు, రొటేషన్ విధానం కోసం వేచి ఉన్న ప్రమాదం.
AnyConnect కాని ప్రొఫైల్లు
Cisco యొక్క రెండు పాత క్రెడెన్షియల్ శైలులు దీనితో గందరగోళపడతాయి. vpnc ప్రొఫైల్ IPSec ID అడుగుతుంది, అది నిజానికి సమూహం పేరు, తర్వాత సమూహ రహస్యం, తర్వాత మీ స్వంత క్రెడెన్షియల్లు, మరియు మూడూ గేట్వే నిర్వహించే వారి నుండి వస్తాయి. పాత Cisco IPsec AnyConnect కంటే భిన్న ప్రోటోకాల్, కాబట్టి vpnc కేవలం-AnyConnect సేవను చేరుకోలేదు; openconnect --protocol=anyconnect ఆ పనికి తెరిచిన క్లయింట్.
.pcf ఫైల్ పాత క్లయింట్ ప్రొఫైల్ను వివరిస్తుంది. అందులోని హోస్ట్, సమూహ పేరు మరియు సమూహ పాస్వర్డ్ Cisco IPsec మాట్లాడే క్లయింట్లో చేతితో మళ్లీ నమోదు చేయవచ్చు, అయినప్పటికీ ఫైల్ సార్వత్రిక దిగుమతి కాదు మరియు ఏదైనా అప్రమేయ పోర్ట్ లేదా టన్నెలింగ్ మోడ్ సాధారణంగా బదిలీలో పోతుంది.
గేట్వే నిజంగా ఇచ్చే దానితో ప్రారంభించి, ఆ ప్రోటోకాల్ మాట్లాడే క్లయింట్ను ఎంచుకోండి. మరో సైట్ నుండి ప్రొఫైల్ కాపీ చేయడమే ఎప్పుడూ సమస్య కాని క్రెడెన్షియల్లను డీబగ్ చేయడానికి ప్రజలు చేరే మార్గం.