चार हरफ भएको 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 र इतिहासबाट बाहिर राख्नुहोस्, अवस्था र एउटा स्रोत जाँच्नुहोस्, अनि उही स्क्रिप्टमा विच्छेद गर्नुहोस्।

सम्बन्धित लेखहरू