OpenVPN کنٹرول ٹرمینل پر صارف نام اور پاس ورڈ مانگتا ہے، اور معیاری اِن پٹ کی طرف موڑی گئی فائل وہ ٹرمینل نہیں ہے۔ یہی ایک تفصیل اُس اسکرپٹ کی وضاحت کرتی ہے جو پاس ورڈ پائپ میں موجود ہونے کے باوجود اٹک جاتی ہے۔ پرامپٹ کلائنٹ بناتا ہے اور پڑھائی ٹرمینل ڈیوائس سے ہوتی ہے، اس لیے stdin موڑنے سے کچھ نہیں بدلتا۔ کلائنٹ کو اُس کے دستاویزی اِن پٹ راستوں میں سے کسی ایک سے کھلائیں اور وہی اسکرپٹ پہلی کوشش میں جڑ جائے گی۔

تین راستے تقریباً ہر صورت کو ڈھانپ لیتے ہیں، اور ہر ایک اپنے انداز میں ناکام ہوتا ہے۔ کلائنٹ جو پرامپٹ واقعی دکھاتا ہے اُس کے مطابق چنیں، اُس آپشن کے مطابق نہیں جو اسکرپٹ کرنے میں سب سے آسان ہے۔

پرامپٹ stdin سے نہیں آتا

جب OpenVPN کو اسناد درکار ہوں تو وہ کنٹرول ٹرمینل کھولتا ہے اور وہیں سے پڑھتا ہے۔ اسی لیے انٹرایکٹو جانچ ٹھیک دکھتی ہے، جبکہ cron یا unit فائل کے تحت وہی کمانڈ بے حرکت پڑی رہتی ہے اور پرامپٹ ایسے لاگ میں لکھا جاتا ہے جسے کوئی نہیں دیکھتا۔ کچھ بلڈز ٹرمینل نہ ہونے پر معیاری اِن پٹ پر واپس چلے جاتے ہیں، اور یہ عدم مطابقت سخت ناکامی سے بھی بدتر ہے، کیونکہ یہ تعیناتی تک مسئلہ چھپاتی ہے۔

کوئی بھی کوڈ لکھنے سے پہلے ماحول جانچیں: کلائنٹ کو اُسی صارف اور اُسی stdin کے ساتھ چلائیں جو شیڈیولر یا سروس مینیجر استعمال کرے گا۔ اگر پرامپٹ کبھی لاگ میں نہ آئے اور عمل آگے نہ بڑھے، تو کوئی چیز ایسے ٹرمینل کا انتظار کر رہی ہے جو موجود نہیں۔

پہلا راستہ: دو سطروں والی اسناد کی فائل

توثیق کا آپشن راستہ لیتا ہے، اور فائل میں بالکل دو سطریں ہوتی ہیں، پہلے صارف نام پھر پاس ورڈ، اور کچھ نہیں۔ طے شدہ فائل نام پر بھروسا کرنے کے بجائے راستہ واضح طور پر دیں، کیونکہ کام کی ڈائریکٹری میں پڑی اسناد کی فائل ہی غلط اکاؤنٹ کے استعمال میں آنے کا راستہ ہے۔ موڈ 0600 رکھیں اور ملکیت اُس اکاؤنٹ کو دیں جو کلائنٹ چلاتا ہے۔

کلائنٹ وہ فائل آغاز میں ایک بار پڑھتا ہے، اس لیے پاس ورڈ گھمانے کا مطلب عمل کو دوبارہ شروع کرنا ہے۔ عام طور پر یہی مطلوبہ رویہ ہے، اور یہ گھمانے کے طریقہ کار کے ساتھ runbook میں آنا چاہیے۔

دوسرا راستہ: کلید کے پاس فریز کے لیے askpass

پاس فریز سے محفوظ نجی کلید دوسرا، مختلف پرامپٹ اٹھاتی ہے، اور اُس کا اپنا فائل پر مبنی جواب ہے: askpass آپشن فائل کی پہلی سطر سے فریز پڑھتا ہے۔ SSH پر مبنی سرنگوں کے لیے مساوی چیز وہ askpass پروگرام ہے جو کلائنٹ چلاتا ہے، اور اُس کا معیاری آؤٹ پٹ راز بن جاتا ہے۔

دونوں شکلوں میں سے کوئی بھی راز دلیل کی فہرست میں نہیں رکھتی، اور دونوں اُسے فائل یا اُسے چھاپنے والے قابلِ عمل پروگرام کے طور پر رہنے دیتی ہیں۔ حفاظت فائل کی اجازتیں اور عمل کی ملکیت ہے، پوشیدگی نہیں۔ کوڈ میں لکھی ہوئی تار دہرانے والا معاون اضافی مراحل والا راز ہے۔

تیسرا راستہ: پورٹل کلائنٹ کی اپنی CLI

اداروں کے کلائنٹ عام طور پر کمانڈ لائن کے داخلے کا مقام دیتے ہیں جو کسی کھڑکی کے بغیر نامزد پورٹل سے جڑتا ہے، اور یہی معاون راستہ ہے۔ Linux پر GlobalProtect کلائنٹ اپنی CLI کے ذریعے جوڑنے اور سرٹیفکیٹ درآمد کرنے کی کارروائیاں دیتا ہے، اور سرٹیفکیٹ توثیق استعمال کرنے والے پورٹلز کو خودکار جوڑ سے پہلے درآمد کا مرحلہ درکار ہوتا ہے۔ مصنوعی کلید دباؤ کے بجائے اسی کو ترجیح دیں: آپ کو حقیقی اخراج کی حالت ملتی ہے، کھڑکی کے فوکس پر انحصار نہیں، اور یہ مقفل اسکرین پر بھی قائم رہتا ہے۔

اگر پہلے جوڑ کو ابھی بھی سرٹیفکیٹ قبول کرنے کے لیے انسان درکار ہو، تو خودکاری مکمل نہیں ہوئی۔ سیٹ اپ کے دوران ہی درآمد کریں اور اُسے پیشگی شرط کے طور پر لکھیں۔

جب بہاؤ کو چھدم ٹرمینل درکار ہو

وہ ترتیب جو پہلے پاس ورڈ اور پھر ایک بار کا کوڈ مانگتی ہے، اُس کے پاس پڑھنے کے لیے ایک بھی فائل نہیں۔ Expect جیسا ٹرمینل ڈرائیور درست اوزار ہے، کیونکہ وہ باری باری ہر نمونے کا انتظار کرتا ہے، اور کچھ بھی ملانے سے پہلے عمل کا شروع ہونا ضروری ہے۔

دو ناکامیاں غالب ہیں۔ کلائنٹ شروع کیے بغیر پرامپٹ کا انتظار کرنے والی اسکرپٹ ہمیشہ انتظار کرتی ہے، اور Tcl شیل نہیں ہے، اس لیے expect بلاک کے اندر لکھی گئی شیل ریاضی پڑھے جانے کے مطابق جانچی نہیں جاتی۔ نمونے بناتے وقت ڈیبگ جھنڈا کھلا رکھیں، پھر بند کر دیں۔

وہ راز جو رس کرتے ہیں، اور کہاں چھپتے ہیں

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

آپ نے جو راستے چنے اُن کا جائزہ لیں، پھر اُنہیں اُس unit فائل یا شیڈیولر سے جوڑیں جو واقعی کلائنٹ چلائے گا۔ سرنگ ٹھیک اُتنی دیر زندہ رہتی ہے جتنی دیر وہ عمل زندہ رہتا ہے۔

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