سكربتك يشغّل الـ VPN؛ لكنه لا يهيّئه
يحتاج أمر التشغيل إلى اتصال موجود مسبقًا ومعتمد. افصل التهيئة عن التحكم بالجلسة، وإلا فلن يعمل السكربت إلا على جهاز Mac الخاص بك.
تكتب سكربتًا يشغّل scutil --nc start مع اسم الاتصال، فيعمل على جهاز Mac لديك، ثم يفشل على كل جهاز يُنصّب حديثًا في المكتب. السكربت ليس معطوبًا. إنه يُطلب منه ما لم يكن قادرًا عليه أبدًا: فتشغيل اتصال قائم ليس العملية نفسها التي تنشئ اتصالًا.
التهيئة والتحكم بالجلسة مهمتان بمالكين اثنين، وأي سير عمل يفترض غير ذلك سينجح في كل اختبار على الجهاز الذي كُتب عليه.
ما الذي يخاطبه أمر التشغيل فعليًا
أمر التحكم بالجلسة يخاطب إعدادًا موجودًا مسبقًا ومعتمدًا مسبقًا. يطلب من النظام تشغيل ذلك الاتصال المسمّى، مستخدمًا إعدادات الخادم ومراجع الهوية والسياسة التي خُزّنت سابقًا. وإن لم تُثبّت تلك أبدًا، فلا يوجد شيء لتشغيله.
لهذا يظهر الفشل على العتاد الجديد لا على حاسوب المدير. ذلك الحاسوب هُيّئ قبل أشهر على يد شخص نسِي أنه فعل ذلك. فكّر في أمر التشغيل كجرس باب ركّبه أحدهم في الربع الماضي. والضغط عليه ليس مثل تمديد الأسلاك.
ثلاثة مالكين لإعداد VPN
الملف الشخصي الذي تديره المؤسسة يأتي من إدارة الأجهزة. يحمل الملف عناوين الخادم وترتيب المصادقة والسياسة التي تتطلّبها المؤسسة، ومدير VPN هو الشخص الذي يوفّرها. ولا ينبغي للسكربت أن يعيد بناء تلك الإعدادات من اسم عرض وجده في قائمة.
يُنشأ إعداد VPN شخصي أصيل عبر واجهة Network Extension API من Apple، وهي تغطي بروتوكولي IPsec وIKEv2 المدمجين. تلك واجهة تطبيق فيها خطوة حفظ وموافقة مستخدم، لا أمر صدفة ينشئ صامتًا أي نوع نفق يقدّمه مورّد.
عميل الطرف الثالث حالة ثالثة لها صيغة استيراد خاصة وأداة إدارة خاصة، وغالبًا مساعد خاص بصلاحيات مرتفعة. جلسته يملكها عملية ذلك المورّد. والعثور على خدمة نظام باسم مشابه ليس دليلًا على أن أمرًا في النظام يتحكم بالنفق، وافتراض ذلك ينتج سكربتات تبدو عاملة حتى يحدّث المورّد العميل.
التهيئة الأصلية فيها حفظ وموافقة
نموذج Apple هو تحميل ثم تعديل ثم حفظ. يحمّل التطبيق التفضيلات القائمة قبل أول حفظ له بعد الإطلاق، ويغيّر الإعداد، ثم يحفظه. ويُبلّغ الحفظ عن خطأ حين لا يستطيع التثبيت، وتجاهل تلك النتيجة يحوّل فشل التهيئة إلى فشل اتصال بعد ثلاث خطوات.
أول حفظ يتطلّب أيضًا موافقة المستخدم على التطبيق. هذا حدّ أمني متعمّد، ويعني أن التشغيل الأول على جهاز Mac جديد تفاعلي حتى لو أمكن أتمتة كل اتصال وفصل لاحق. خطّط للتشغيل الأول كمهمة بشرية بحضور إنسان. وأتمت التشغيل الثاني وما بعده، وقل ذلك في دليل التشغيل حتى لا يَعِد أحد بالمستحيل. وخطة نشر تَعِد بتشغيل أول غير مُدار بالكامل تَعِد بشيء لا تقدّمه المنصة.
توصي Apple أيضًا بالتحقق من توافق الخادم عبر ملف إعداد قبل الاعتماد على الواجهة. وفعل ذلك الفحص أولًا يفصل «الخادم لن يقبل هذا العميل» عن «العميل لم يخزّن الإعدادات قط»، وهما تذكرتان مختلفتان لفريقين مختلفين.
ما يجوز لأمر تشغيل قابل للتكرار أن يفترضه
بعد التهيئة، يستطيع السكربت أن يستهدف الاتصال القائم بأمان عبر واجهة مالكه. زوّده بهوية الاتصال الثابتة مع الإجراء الذي تريده، ولا شيء غير ذلك. ولا ينبغي أن يقرأ مسار تفضيلات مخمّنًا، ولا أن يفترض أن الاسم المعروض في القائمة فريد على مستوى النظام.
بالنسبة إلى الاتصالات الأصلية، طلب جلسة مسمّى مثل scutil --nc start عملية تحكم. وهو لا يثبّت إعدادات الخادم ولا يستورد بيانات اعتماد ولا ينفّذ تخويل أول حفظ. تعامل معه كخطوة أخيرة في سلسلة، لا كالسلسلة كلها.
أبعد الأسرار عن وسائط سطر الأوامر وعن مخرجات التشخيص العادية. وأي آلية هوية اختارها النشر هي التي ينبغي لأمر التشغيل الاعتماد عليها، وكلمة مرور لُصقت في سجل صدفة هي ملاحظة في أي مراجعة.
فحصا قبول
الفحص الأول هو التهيئة: خذ جهاز Mac منصّبًا حديثًا وأثبت أن الإعداد موجود ويملكه المدير الصحيح ومعتمد بالكامل. افعل ذلك قبل اختبار الاتصال، لأن اختبار اتصال على جهاز غير مهيّأ لا يثبت شيئًا عن السكربت.
الفحص الثاني هو الجلسة: اتصل، وابلغ المورد المصرّح به، وافصل بنظافة. لكل فشل الآن مالك، وهذه هي الفائدة العملية من فصل المهمتين. الملف الشخصي الناقص مشكلة تسليم، وخطأ الحفظ مشكلة موافقة، وتسجيل الدخول المرفوض مشكلة مصادقة، وانتهاء المهلة بعد تشغيل ناجح هو طبقة الجلسة. ولا واحد منها هو «السكربت معطوب».