నాలుగు పంక్తుల here-పత్రం పూర్తి ఇంటరాక్టివ్-యేతర లాగిన్ అని నమ్మకం, గేట్‌వే రెండు గ్రూపులను అందించినప్పుడు, బ్యానర్‌ను ముద్రించినప్పుడు లేదా పాస్‌వర్డ్ తర్వాత టోకెన్ అడిగినప్పుడు అది కూలిపోతుంది. అప్పుడు అదే స్క్రిప్ట్ సంఖ్యను ఆశించిన మెనూలో పాస్‌వర్డ్‌ను టైప్ చేస్తుంది. Linux లోని కమాండ్ లైన్ క్లయింట్ స్క్రిప్ట్ చేయదగినది, కానీ ట్యుటోరియల్ ఊహించినది కాకుండా అది నిజంగా ఎదురుచూస్తున్నది ఇచ్చినప్పుడే.

స్థిర here-పత్రం ఒక పురాణం

Cisco యొక్క Linux క్లయింట్ /opt/cisco/anyconnect/bin/vpn వద్ద చిన్న ప్రోగ్రామ్‌ను ఇన్‌స్టాల్ చేస్తుంది, Secure Client 5 దాన్ని ఇంకా అందిస్తుంది. vpnagentd సేవ నడుస్తున్నప్పుడు, -s జెండా క్లయింట్ అడిగే క్రమంలో ప్రామాణిక ఇన్‌పుట్ నుండి సమాధానాలను చదువుతుంది. ఆ క్రమం సర్వర్ల మధ్య స్థిరం కాదు.

గ్రూప్ మెనూ ఒక పంక్తిని జోడిస్తుంది. లాగిన్ బ్యానర్ మరొకదాన్ని జోడిస్తుంది. పాస్‌వర్డ్ తర్వాత టోకెన్ అభ్యర్థన నాలుగు పంక్తుల స్క్రిప్ట్‌ను పూర్తిగా విరగ్గొడుతుంది, ఎందుకంటే ఐదవ పంక్తి ఎప్పటికీ టోకెన్ కాదు. వైఫల్యం నిశ్శబ్దం: క్లయింట్‌కు తప్పు స్ట్రింగ్ అందుతుంది, కనెక్షన్ ప్రయత్నం ముగుస్తుంది, స్క్రిప్ట్ ఉపయోగకరమైనది ఏమీ నివేదించదు.

క్లయింట్‌ను అదే గేట్‌వే మరియు వెర్షన్‌కు వ్యతిరేకంగా ఒకసారి చేతితో అమలు చేసి, ప్రాంప్ట్‌లు కనిపించే క్రమంలో రాయండి. ఆ ట్రాన్స్‌క్రిప్ట్ మీ స్క్రిప్ట్ నెరవేర్చాల్సిన స్పెసిఫికేషన్.

క్లయింట్ ఏమి ఎదురుచూస్తోంది

సాధారణ ఒకే గ్రూప్ సందర్భంలో క్రమం వినియోగదారు పేరు, పాస్‌వర్డ్ మరియు కొన్నిసార్లు బ్యానర్ నిర్ధారణ. సర్వర్ నిజంగా మెనూను చూపించినప్పుడే here-పత్రం మొదటి పంక్తి మెనూ సూచికగా మారుతుంది, అందుకే అదే స్క్రిప్ట్ ఒక చోట పనిచేసి తదుపరి చోట విఫలమవుతుంది.

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

దీన్ని స్థిర ప్రోటోకాల్‌గా కాకుండా నాలుగు సాధ్యమైన ప్రశ్నలకు నాలుగు సమాధానాలుగా చదవండి. సున్నా మెనూ ఎంపిక, పాస్‌వర్డ్ కాదు, చివరి y చాలా గేట్‌వేలు ఎప్పుడూ పంపని బ్యానర్‌ను అంగీకరిస్తుంది.

క్రమాన్ని ఊహించలేనప్పుడు expect ఉపయోగించండి

ప్రాంప్ట్ క్రమం మారినప్పుడు పంక్తులను లెక్కించడం ఆపి బదులుగా ప్రాంప్ట్ కోసం ఎదురుచూడండి. Expect స్క్రిప్ట్ connect ఆదేశాన్ని ప్రారంభించి, వినియోగదారు పేరు ప్రాంప్ట్ కోసం ఎదురుచూసి పంపి, పాస్‌వర్డ్ ప్రాంప్ట్ కోసం ఎదురుచూసి పంపి, ఆపై కనెక్ట్ అయిన స్థితి కోసం ఎదురుచూస్తుంది. ప్రతి నిరీక్షణకు దాని స్వంత సమయ పరిమితి ఉంటుంది.

సమయ పరిమితిని వైఫల్యంగా పరిగణించి నిష్క్రమించండి. ఊహించని ప్రాంప్ట్ తర్వాత కూడా ఇన్‌పుట్ పంపుతూ ఉండే స్క్రిప్ట్ పాస్‌వర్డ్‌ను సంతోషంగా షెల్, మెనూ లేదా చదువుతున్న ఏదైనా ఇతర దానిలో టైప్ చేస్తుంది. అలా లాగిన్ స్క్రిప్ట్ ఒక సంఘటనగా మారుతుంది.

Expect రహస్యాన్ని తొలగించి లాగ్ చేయదగిన ట్రాన్స్‌క్రిప్ట్‌ను కూడా ఇస్తుంది, అప్‌గ్రేడ్ తర్వాత గేట్‌వే తన ప్రాంప్ట్‌లను మార్చినప్పుడు అది నిష్క్రమణ కోడ్ కంటే ఎక్కువ విలువైనది.

రహస్యం ఎక్కడో నివసించాలి

ఈ సమస్య యొక్క ప్రతి వెర్షన్ ఒక బలహీనతను పంచుకుంటుంది: పాస్‌వర్డ్ క్లయింట్ చదవగల రూపంలో ఉండాలి. దాన్ని ఆర్గ్యుమెంట్‌గా పంపడం ప్రాసెస్ పట్టికలో బహిర్గతం చేస్తుంది. పైప్ ద్వారా ప్రతిధ్వనించడం తరచుగా దాన్ని షెల్ చరిత్రలో పెడుతుంది. రెండూ భాగస్వామ్య జంప్ హోస్ట్‌పై ఇతర స్థానిక వినియోగదారులు చదవగలరు.

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

ఖాతా యాజమాన్యంలోని 600 మోడ్ ఫైల్ కనీసం, అది ఇంకా డిస్క్‌పై సాదా పాఠ్య రహస్యమే. secret-tool lookup Linux కీరింగ్ నుండి చదువుతుంది, macOS లో అదే పనిని security find-generic-password -w చేస్తుంది. సంస్థ సర్టిఫికెట్ లేదా SAML ప్రామాణీకరణకు మద్దతు ఇచ్చే చోట దానికి ప్రాధాన్యం ఇవ్వండి, ఎందుకంటే నిల్వ చేసిన పాస్‌వర్డ్ మరియు MFA కలిసి కూడా మనిషి లేకుండా లాగిన్ పూర్తి చేయలేవు.

సొరంగాన్ని నిర్ధారించి, ఆపై డిస్‌కనెక్ట్ బాధ్యత తీసుకోండి

లోపం వచనం లేకపోవడాన్ని నమ్మకండి. క్లయింట్‌ను దాని స్థితిని అడిగి ఇంటర్‌ఫేస్‌ను స్వతంత్రంగా తనిఖీ చేయండి:

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

స్థితి Connected అని చదవాలి, సొరంగ ఇంటర్‌ఫేస్‌కు చిరునామా ఉండాలి. ఆపై సొరంగం చేరుకోవాల్సిన ఒక వనరును అడగండి, ఎందుకంటే మార్గం లేని కనెక్ట్ స్థితి నిజమైన ఫలితం మరియు దాన్ని తప్పించుకోవడం సులభం.

vpn disconnect తో డిస్‌కనెక్ట్ అవ్వండి, సొరంగాన్ని ప్రారంభించిన స్క్రిప్ట్ డిస్‌కనెక్ట్ బాధ్యత తీసుకోనివ్వండి. సెషన్‌ను తెరిచి ఉంచే విఫలమైన పని లైసెన్స్ సీటును వినియోగించి తదుపరి ప్రయత్నించే వ్యక్తికి ప్రామాణీకరణ సమస్యగా కనిపిస్తుంది.

పని క్రమం: vpnagentd నిర్ధారించండి, నిజమైన ప్రాంప్ట్ క్రమాన్ని నమోదు చేయండి, here-పత్రం లేదా expect ఎంచుకోండి, రహస్యాన్ని argv మరియు చరిత్ర వెలుపల ఉంచండి, స్థితి మరియు ఒక వనరును తనిఖీ చేయండి, ఆపై అదే స్క్రిప్ట్‌లో డిస్‌కనెక్ట్ అవ్వండి.

సంబంధిత వ్యాసాలు