चार ओळींचा 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 आणि इतिहासाबाहेर ठेवा, स्थिती आणि एक संसाधन तपासा, नंतर त्याच स्क्रिप्टमध्ये विच्छेदित करा.

संबंधित लेख