تین سوالات اس کا فیصلہ کرتے ہیں، اور صرف تین۔ کیا کلائنٹ آپریٹنگ سسٹم میں ایسی کنکشن اندراج بناتا ہے جو دوبارہ آغاز کے بعد بھی قائم رہے؟ کیا وہ ایسی کمانڈ لائن دیتا ہے جو راز اپنی آرگیومنٹ فہرست کے علاوہ کہیں اور سے لے سکے؟ کیا اس کی شناخت کی شرط کسی انسان کو براؤزر پرامپٹ کا جواب دینے پر مجبور کرتی ہے؟ اسی ترتیب سے جواب دیں اور انتخاب ذوق کا معاملہ نہیں رہتا، کیونکہ مقررہ کام صرف اتنا ہی ہیڈ لیس ہو سکتا ہے جتنا تین جوابوں میں سب سے کمزور اجازت دیتا ہے۔

کلائنٹ کو تین اسکرپٹ کے قابل طبقوں سے ہم آہنگ کریں

مقامی 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 پے لوڈ یا کنفیگریشن پروفائل ترجیح دیں، جہاں پلیٹ فارم اسناد کے زندگی کے چکر کا مالک ہے، اور جو کلائنٹ اس طرح منظم نہیں ہو سکتے ان کے لیے اسکرپٹ رکھیں۔

ایگزٹ کوڈ اور پہلا ناکام وسیلہ لاگ کریں، یہ حقیقت نہیں کہ اسکرپٹ چلا۔ وہی ایک سطر شیڈیولر کی وارننگ کو پانچ منٹ کی تشخیص میں بدل دیتی ہے۔

متعلقہ مضامین