तीन प्रश्न हे ठरवतात, आणि फक्त तीन. क्लायंट ऑपरेटिंग सिस्टममध्ये रीबूटनंतरही टिकणारी कनेक्शन नोंद तयार करतो का? तो आपल्या आर्ग्युमेंट यादीशिवाय दुसऱ्या कुठूनही रहस्य घेऊ शकणारी कमांड लाइन देतो का? त्याची ओळखीची मागणी एखाद्या माणसाला ब्राउझर प्रॉम्प्टला उत्तर देण्यास भाग पाडते का? याच क्रमाने उत्तर द्या आणि निवड आवडीचा विषय राहत नाही, कारण नियोजित काम तीन उत्तरांपैकी सर्वात कमकुवत उत्तर जितके परवानगी देते तितकेच हेडलेस असू शकते.

क्लायंटला तीन स्क्रिप्टयोग्य स्तरांशी जुळवा

मूळ OS प्रोफाइल, विक्रेता CLI, फक्त-GUI क्लायंट आणि ब्राउझर-SSO क्लायंटला चार वेगवेगळे दृष्टिकोन लागतात. पहिले दोन देखरेखीशिवाय रीबूट सहन करतात, आणि देखरेखीशिवाय रीबूट हाच संपूर्ण मुद्दा आहे. उर्वरित दोनांना स्क्रिप्टपूर्वी डिझाइन निर्णय लागतो.

What the client exposesWhat to scriptWhat still bites
OS-native connection entryrasdial, scutil --nc, nmcliTunnel is up before DNS and routes settle
Vendor CLI reading stdinCLI wrapped by the scheduler, secret from the credential storePrompt text changes between releases
GUI onlyPinned version plus a state assertionLocale and DPI break the click targets

पहिला मार्ग: प्रोफाइल आधीच ऑपरेटिंग सिस्टमच्या मालकीची आहे

हा सर्वात स्वस्त मार्ग आहे आणि बहुतेक लोक जो दुर्लक्षित करतात तो हाच. Windows मध्ये rasdial "Office" जोडले जाते आणि rasdial "Office" /disconnect ते बंद करते; rasphone -d "Office" त्याच नोंदीला डायल-अप इंटरफेसद्वारे चालवते. macOS scutil --nc list ने जतन केलेल्या सेवा सूचीबद्ध करते आणि scutil --nc start ने एक सुरू करते. Linux काम NetworkManager ला सोपवते.

rasdial "Office" user *
scutil --nc start "Office"
nmcli connection up id Office
nmcli -t -f GENERAL.STATE connection show Office

हे इंटरफेस फक्त OS च्या मालकीच्या प्रोफाइल्सना ओळखतात, त्यामुळे कोणताही तृतीय-पक्षीय क्लायंट चालवू शकत नाहीत. प्रोफाइल नसेल तर ती एकदा तयार करा आणि प्रत्येक वेळी पुन्हा तयार करण्याऐवजी स्क्रिप्टला ती तपासू द्या. स्क्रिप्ट idempotent करा: सध्याची स्थिती वाचा, फक्त डिस्कनेक्ट असताना जोडा, आणि नंतर कामाला खरोखर आवश्यक असलेले खाजगी नाव तपासा.

दुसरा मार्ग: विक्रेता कमांड लाइन देतो

काही क्लायंट गुंडाळण्यापुरती कमांड लाइन देतात: Cisco AnyConnect कडे वर्षानुवर्षे फक्त-कनेक्शन सहाय्यक आहे, आणि OpenConnect एकाच बायनरीमधून AnyConnect, GlobalProtect आणि Pulse प्रोटोकॉल बोलतो. महत्त्वाची मागणी फ्लॅग यादी नाही, तर रहस्य कुठून येते हे आहे, कारण आर्ग्युमेंट यादीतील पासवर्ड प्रक्रिया सूचीबद्ध करू शकणारा कोणीही वाचू शकतो.

printf '%s\n' "$VPN_PASS" | openconnect --protocol=anyconnect \
  --user "$VPN_USER" --passwd-on-stdin vpn.example.com

FortiClient आणि काही GlobalProtect बिल्डमध्ये कोणतेही समर्थित CLI नाही, आणि समुदाय क्लायंट किंवा विक्रेता-परवाना असलेला पर्याय हा खरेदीचा निर्णय आहे, उपाय नाही. CI मध्ये सेवा खात्याला त्याच बायनरीवर हक्क द्या, शेलवर नाही, जेणेकरून इंजेक्ट केलेला आर्ग्युमेंट root कमांड होऊ शकणार नाही.

तिसरा मार्ग: GUI ऑटोमेशन, आणि ते शेवटी का

अधिकृत क्लायंटकडे इंटरफेस नसल्यास स्क्रिप्ट विंडो संदेश किंवा SendKeys द्वारे बटणे दाबतात. हे आवृत्ती आणि भाषेप्रती नाजूक आहे, अर्धवट जोडलेले सत्र सोडू शकते, आणि चुकीच्या भाषेत संवाद आला तर शांतपणे अपयशी होते. हा मार्ग घेतल्यास क्लायंट आवृत्ती पिन करा, नंतर तयार झालेली कनेक्शन स्थिती तपासा, आणि स्क्रिप्टजवळ दस्तऐवजीकृत मॅन्युअल पर्याय ठेवा.

क्लायंटची प्रक्रिया मारून जबरदस्तीने डिस्कनेक्ट करण्यासाठीही तीच सावधानी लागू होते. टनेल प्रक्रियेपेक्षा जास्त काळ टिकू शकते, किंवा पर्यवेक्षक ती पुन्हा सुरू करू शकतो, म्हणून मारून-पुन्हा-सुरू करणेही विश्वासार्ह रीसेट नाही.

टनेल उभे राहिल्यानंतर काय तुटते

यशस्वी डायल फक्त प्रमाणीकरण सिद्ध करते, इतर काहीही नाही. ज्या संसाधनासाठी काम अस्तित्वात आहे ते त्याच्या स्वतःच्या प्रोटोकॉलने आणि छोट्या कालमर्यादेने तपासा, आणि अपयश संदेशात टप्प्याचे नाव द्या. तुमच्या डेस्कटॉपवर दिसणारी प्रोफाइल, प्रमाणपत्रे आणि साठवलेली क्रेडेन्शियल्स सेवा सत्राला अदृश्य असू शकतात, म्हणून त्यावर विश्वास ठेवण्यापूर्वी काम शेड्युलरच्या स्वतःच्या खात्याखाली एकदा चालवा.

पुन्हा प्रयत्न मर्यादित करा. नाकारलेली क्रेडेन्शियल्स पुन्हा करणारा लूप खाती लॉक करतो, आणि MFA प्रॉम्प्टला हेडलेस काम नोंदणी डिझाइनशिवाय उत्तर देऊ शकत नाही; ब्राउझर SSO प्रवाहाविरुद्ध स्क्रिप्टेड पुनःप्रयत्न फक्त प्रयत्न जाळतात. ताफ्यासाठी MDM द्वारे पोहोचवलेले VPN पेलोड किंवा कॉन्फिगरेशन प्रोफाइल पसंत करा, जिथे प्लॅटफॉर्म क्रेडेन्शियल्सच्या जीवनचक्राचा मालक आहे, आणि अशा पद्धतीने व्यवस्थापित न होणाऱ्या क्लायंटसाठी स्क्रिप्ट ठेवा.

एक्झिट कोड आणि पहिले अपयशी संसाधन लॉग करा, स्क्रिप्ट चालली ही वस्तुस्थिती नाही. तीच एक ओळ शेड्युलर इशाऱ्याचे पाच मिनिटांच्या निदानात रूपांतर करते.

संबंधित लेख