टोकन कोड पर्खिरहेको VPN लगइनलाई कसरी स्वचालित गर्ने
टर्मिनलमा सोध्ने CLI VPN क्लाइन्टले पासवर्ड मात्र पाइप गर्ने स्क्रिप्टलाई रोक्छ। expect तिर जानु अघि यी पाँच जाँच पूरा गर्नुहोस्।
विक्रेताको VPN क्लाइन्ट सुरु गर्ने स्क्रिप्ट समय सकिनेसम्म झुन्डिन्छ, र कसैले पनि टाइप नगरेको प्रमाणीकरण कोड क्लाइन्टले मागिरहेको देखिन्छ। पासवर्ड दिइएको थियो, त्यसैले पासवर्ड नै गलत हो भन्ने स्पष्ट निष्कर्ष देखिन्छ। त्यस्तो होइन। कोडको अनुरोध फरक च्यानलमा फरक संवाद हो, र तपाईंको स्क्रिप्टले त्यो कहिल्यै खोलेन।
तलका पाँच जाँच क्रममा गर्नुहोस्। पहिलो असफल हुनेमा रोक्नुहोस्, किनकि हरेक पछिल्लो चरणले अघिल्ला मान्य छन् भन्ने मान्छ।
जाँच 1: क्लाइन्टले मानक इनपुट पढ्छ कि पढ्दैन?
कुनै पनि स्वचालन लेख्नु अघि परीक्षण गर्नुहोस्: पाइपबाट क्लाइन्टमा नक्कली रहस्य पठाउनुहोस् र के हुन्छ हेर्नुहोस्। यदि उसले आफ्नो अनुरोध छाप्छ र त्यसपछि पर्खन्छ भने, त्यो पाइप पढ्दैन।
धेरै क्लाइन्टले टर्मिनल यन्त्र सिधै खोल्छन्, वा टर्मिनल नभएको स्ट्रिमबाट रहस्य लिन अस्वीकार गर्छन्, ताकि बाटो बिराएको पाइपले पासवर्ड चुहाउन नसकोस्। OpenVPN दस्तावेजी अपवाद हो, किनकि --auth-user-pass ले फाइल मार्ग लिन्छ। एक पटकको कोड माग्ने विक्रेता क्लाइन्टमा सामान्यतया समान विकल्प हुँदैन, र तिनको अनुरोध तपाईंको स्क्रिप्टले नदिएको टर्मिनल पर्खिरहेको हुन्छ।
जाँच 2: चाइल्ड प्रक्रियासँग टर्मिनल छ?
pty ले चाइल्डलाई टर्मिनल दिन्छ, जसले अनुरोधहरूलाई क्रममा जवाफ दिन सकिने पढ्नयोग्य आउटपुटमा बदल्छ।
import pexpect
child = pexpect.spawn("openconnect vpn.example.net", encoding="utf-8", timeout=30)
child.expect("GROUP:")
child.sendline("staff")
child.expect("USERNAME:")
child.sendline("alice")
child.expect("PASSWORD:")
child.sendline(PASSWORD)
child.expect("Connected as", timeout=60)माथिका अनुरोध स्ट्रिङ उदाहरण हुन्; तपाईंको क्लाइन्टले छाप्ने ठ्याक्कै पाठ अक्षरको आकार र विरामचिन्हसहित प्रतिलिपि गर्नुहोस्। हरेक अपेक्षासँग समयसीमा हुन्छ, र बन्द चाइल्डले स्थिति फर्काउनुको सट्टा अपवाद फ्याँक्छ, त्यसैले क्रम बेर्नुहोस् र फाइलको अन्त्यलाई असफलता मान्नुहोस्। यो ब्लकले के गर्दैन भन्नेमा ध्यान दिनुहोस्: चाइल्ड स्क्रिप्टसँगै मर्छ, किनकि pty अलग गर्ने क्रियाविधि होइन र disown शेलको अन्तर्निहित आदेश हो जुन तपाईंको स्क्रिप्टले बनाएको प्रक्रियासम्म पुग्न सक्दैन।
जाँच 3: समर्थित गैर-इन्टर्याक्टिभ इनपुट छ?
स्क्रिन-स्क्र्यापिङ क्लाइन्ट अपग्रेडमा भाँचिन्छ, त्यसैले पहिले दस्तावेजी विकल्प खोज्नुहोस्।
सहायता आउटपुटमा टोकन वा एक पटकको कोड विकल्प छ कि भनी जाँच्नुहोस्, र पासवर्ड फिल्डमा थपिएको कोड सेवाले स्वीकार्छ कि भनी पनि जाँच्नुहोस्। जहाँ क्लाइन्टले प्रमाणपत्र फाइल पढ्छ, त्यहाँ अनुरोधको सट्टा फाइल दिनुहोस्:
openvpn --config office.ovpn --auth-user-pass <(printf "%s\n%s\n" "$USER_NAME" "$PASSWORD")प्रक्रिया प्रतिस्थापनले /dev/fd उपलब्ध गराउने प्रणालीमा क्लाइन्टलाई पढ्नयोग्य मार्ग दिन्छ। रहस्य क्लाइन्टको दृष्टिकोणबाट अझै रहस्य हो, त्यसैले यसलाई लग, शेल इतिहास र प्रक्रिया सूचीबाट टाढा राख्नुहोस्। क्लाइन्टले /dev/fd अस्वीकार गरे वा प्रमाणपत्र मार्ग एक पटकभन्दा बढी खोले भने, कडा अनुमतिसहित वास्तविक फाइल लेख्नुहोस् र त्यही स्क्रिप्टमा मेटाउनुहोस्।
जाँच 4: सुरुङ स्क्रिप्टभन्दा लामो हुनेछ?
पूर्वनिर्धारित रूपमा सुरुङ आफ्नो अभिभावकसँगै मर्छ, जुन बुटस्ट्र्याप स्क्रिप्टलाई चाहिने कुराको ठीक उल्टो हो।
disown -h ले तब मात्र मद्दत गर्छ जब तपाईंले क्लाइन्टलाई शेल जोबको रूपमा सुरु गर्नुभयो, किनकि यसले त्यो शेलको जोब तालिका सम्पादन गर्छ र तपाईंको स्क्रिप्टले pty मार्फत बनाएको प्रक्रियासम्म पुग्न सक्दैन। निगरानीबिना पुनः जोडिनुपर्ने सबैका लागि सेवा प्रबन्धक राम्रो ठाउँ हो, किनकि यसले क्लाइन्ट पुनः सुरु गर्छ र किन मर्यो भनी अभिलेख गर्छ। जसरी भए पनि, हरेक पुनः जडानपछि नयाँ कोड अपेक्षा गर्नुहोस्: एक पटकको टोकन पहिलो सफल प्रमाणीकरणमा खर्च हुन्छ।
sudo ले क्रममा के गर्छ हेर्नुहोस्। sudo को पासवर्ड अनुरोध VPN को अनुरोध होइन, र त्यसलाई VPN पासवर्डले जवाफ दिनु नै अन्यथा सही अपेक्षा क्रम असफल हुने सबैभन्दा सामान्य तरिका हो।
जाँच 5: व्यक्तिको कोड स्क्रिप्टमा हुनुपर्छ?
यो त्यो जाँच हो जुन मानिसहरूले छोड्छन्। टोकन व्यक्तिको हुन्छ, तर तालिकाअनुसार माथि उठ्नुपर्ने सुरुङ मेसिनको हुन्छ।
यदि कुनै काम निगरानीबिना पुनः जोडिनुपर्छ भने, मेसिन प्रमाणपत्र वा सेवा खाताले इन्टर्याक्टिभ लगइन प्रतिस्थापन गर्न सक्छ कि भनी सोध्नुहोस्। कसैको एक पटकको कोड स्वचालित गर्नु दोस्रो कारकलाई भण्डारित रहस्यमा बदल्नु हो, जुन स्क्रिप्टिङको सुविधा नभई नीति परिवर्तन हो। जहाँ सेवाले दुवैलाई समर्थन गर्छ, त्यहाँ काम वास्तवमै कसरी चल्छसँग मिल्ने प्रमाणपत्र छान्नुहोस्। उत्तर लेखेर राख्नुहोस्, किनकि अर्को व्यक्तिले स्क्रिप्टले किन टोकन राख्छ भनी सोध्नेछ।
काम गर्ने स्क्रिप्ट कस्तो देखिन्छ
स्क्रिप्टले पुगेको चरण छाप्छ, रहस्य कहिल्यै होइन, र कुनै पनि असफल अपेक्षामा शून्य नभएको कोडसँग बाहिर निस्कन्छ।
जानाजानी बिगारेर परीक्षण गर्नुहोस्: गलत पासवर्ड, गलत समूह, म्याद सकिएको टोकन। हरेक असफलता झुन्डिनुको सट्टा नाम दिइएको चरणमा रोकिनुपर्छ। त्यसपछि वास्तविक सेवाविरुद्ध एक पटक चलाउनुहोस् र सुरुङ स्क्रिप्टको बाहिरबाट जाँच्नुहोस्, भित्रबाट होइन.