كيفية كتابة سكربت لتسجيل الدخول إلى AnyConnect على Linux وmacOS
يقرأ الملف التنفيذي vpn الإجابات من الإدخال القياسي بترتيب المطالبات. ابنِ التسلسل، وأحطْه بعلامتي اقتباس مرة واحدة، وأبعده عن قائمة العمليات، واختبر موردًا واحدًا أولًا.
ينتهي السكربت بالخروج بقيمة صفر، ويظهر النفق، ثم يُرفض التشغيل التالي قبل أن يطلب كلمة مرور أصلًا۔ أو يعمل الأمر نفسه في طرفية ويفشل من مهمة مجدولة بخطأ «لم يتم العثور على الحدث» لا يسمّي شيئًا مفيدًا۔ الحالتان كلتاهما خلل في محادثة الإدخال القياسي لدى عميل AnyConnect، لا عطل في الشبكة۔ تعامل مع تسجيل الدخول كسؤال وجواب مكتوب، تصبح الإخفاقات متوقعة وصغيرة۔
لماذا يفشل الأمر نفسه داخل سكربت
يقرأ العميل إجاباته من الإدخال القياسي، سطرًا واحدًا لكل مطالبة، بالترتيب الذي تطلبها به البوابة۔ أي شيء يغيّر عدد المطالبات، مثل لافتة جديدة أو محدّد مجموعة أو تحدٍّ بعامل ثانٍ، يزيح كل إجابة لاحقة بسطر واحد۔ ثم يقرأ العميل اسم مستخدم حيث كان يتوقع كلمة مرور، ويبلّغ عن فشل لا يشير إلى أيٍّ منهما۔
كلمة المرور التي تحتوي على علامة تعجب تضيف فشلًا ثانيًا أهدأ۔ داخل علامات الاقتباس المزدوجة توسّعها الصدفة قبل أن يرى العميل أي شيء بوقت طويل۔
ضع الحمولة بين علامات اقتباس مفردة ويمر الحرف سليمًا۔ هذا هو الإصلاح كله، وهو يفسّر فئة كاملة من التقارير التي تعمل فيها بيانات الاعتماد نفسها عند كتابتها وتفشل عند تخزينها۔ افحص ما فعلته الصدفة قبل أن تفحص البوابة: اطبع الحمولة عبر غلاف يُظهر البايتات الدقيقة وأحصِ الأسطر۔ معظم هذه التحقيقات تنتهي عند هذا الحد۔
اكتب الإجابات بالترتيب الذي يطلبه العميل
شغّل العميل تفاعليًا مرة واحدة واكتب كل مطالبة بالترتيب۔ لا يظهر محدّد المجموعة إلا عندما تنشر البوابة عدة ملفات تعريف، ولا تظهر مطالبة اللافتة إلا عند تكوين واحدة۔ يجب أن يطابق ملف الإجابات البوابة الموجّه إليها فعلًا، لا تلك الموجودة في الوثائق۔
ثم ابنِ الملف بذلك التسلسل الدقيق، إجابة واحدة في كل سطر۔ فهرس المجموعة هو الرقم الذي يسرده العميل، لا موضع ملف التعريف في وثيقة۔ اقبل اللافتة فقط إذا أرسلت بوابتك واحدة، وأضف سطرًا لكل سؤال إضافي يُعرف عن تلك البوابة أنها تطرحه۔ ابدأ العميل بعلامة عدم التفاعل ليستهلك الملف بدلًا من انتظار طرفية۔
connect vpn.lab.example
0
username
password
y
exit/opt/cisco/anyconnect/bin/vpn -s < anyconnect.txtيمكن أن يصل التسلسل نفسه عبر أنبوب عندما تفضّل عدم الاحتفاظ بملف على القرص۔ قواعد الاقتباس ما زالت تحدد ما إذا كان سينجو۔
أبقِ بيانات الاعتماد خارج قائمة العمليات
الوسيطة على سطر الأوامر يمكن لأي مستخدم محلي قراءتها طوال عمر العملية، لذا تنتمي كلمة المرور إلى ملف أو أنبوب ولا تنتمي أبدًا إلى قائمة الوسائط۔ اجعل ذلك الملف مقروءًا فقط للحساب الذي يشغّل السكربت، واحذفه عند انتهاء المهمة۔ على macOS يجلس الملف التنفيذي عادة في المسار نفسه كما على Linux، لكن تأكد من الموقع المثبّت بدلًا من افتراضه۔ الغلاف الذي يفحص المسارين أقصر من تقرير الحادثة۔
printf 'username\npassword\ny\n' | /opt/cisco/anyconnect/bin/vpn -s connect vpn.lab.exampleلا تدع السكربت يعيد المحاولة إلى الأبد أيضًا۔ لافتة تغيّرت أو كلمة مرور انتهت صلاحيتها بين ليلة وضحاها تحوّل ملف إجابات ثابتًا إلى حلقة إعادة محاولة، وحلقة إعادة المحاولة هي ما يقفل الحساب۔
افشل مرة واحدة، واطبع نص خطأ العميل نفسه، واخرج۔ تحتاج المهمة المجدولة إلى المراجعة نفسها للهوية وتوافر بيانات الاعتماد كأي مهمة أخرى غير مراقَبة، لأن بيانات اعتماد تنتهي صلاحيتها بهدوء لا يمكن تمييزها عن انقطاع في الثالثة صباحًا۔
تأكد من الجلسة قبل أن تثق برمز الخروج
حالة متصلة تثبت وجود النفق ولا شيء أبعد من ذلك۔ اختبر موردًا واحدًا يجب أن يكون قابلًا للوصول عبره قبل أن يبدأ السكربت عملًا حقيقيًا، وتعامل مع الفشل هناك كعطل مختلف عن فشل تسجيل الدخول۔ وإلا ستعيد محاولة اتصال سليم تمامًا لا يستطيع ببساطة الوصول إلى وجهته۔
اطلب من العميل حالته قبل الفصل وبعده، لأن جلسة قديمة يمكن أن ترفض الاتصال التالي بينما يبلّغ سكربتك عن النجاح۔
/opt/cisco/anyconnect/bin/vpn state
/opt/cisco/anyconnect/bin/vpn disconnectسجّل مخرجات الحالة بجانب رمز الخروج، لأن الرمز وحده لا يفصل تسجيل دخول مرفوضًا عن جلسة لم تُغلق قط۔ عندما تطالب البوابة بعامل ثانٍ أو موافقة تفاعلية، توقف عن كتابة تلك الخطوة كسكربت واستخدم آلية العميل المدعومة بدلًا من ذلك۔ ملف الإجابات الثابت راحة لبيانات اعتماد تتحكم بها، وليس طريقة للالتفاف حول خطوة مصادقة لا تتحكم بها۔ أبقِ النطاق بهذا الضيق ويبقى هذا سكربتًا قصيرًا۔
متى يكون ملف الإجابات الثابت الأداة الخطأ
العامل الثاني أو مطالبة الموافقة يبطلان النمط بالكامل، وهذا حدّ تصميمي لا أحجية برمجية۔ استخدم أي آلية يدعمها العميل لتلك الخطوة بدلًا من تخمين الإجابة مسبقًا۔ الملف الثابت يعمل فقط مع بيانات اعتماد تبقى نفسها بين التشغيلات۔
هناك نمطان أقدم لبيانات الاعتماد يُخطأ بينهما وبين AnyConnect أيضًا۔ ملف تعريف vpnc يتحدث بروتوكولًا مختلفًا، وهو يريد اسم المجموعة كمعرّف IPSec، ثم سرًا جماعيًا مشتركًا، ثم تفاصيل حسابك۔
لأن البروتوكولات تختلف، لا يستطيع vpnc الوصول إلى بوابة تنشر ملفات تعريف AnyConnect فقط، والبديل المفتوح المعتاد لتلك الخدمة هو openconnect مع اختيار بروتوكول anyconnect الخاص به۔ ملف pcf ينتمي إلى عميل Cisco القديم، ورغم أن مضيفه واسم مجموعته وكلمة مرور مجموعته يمكن إدخالها من جديد في عميل ما زال يتحدث Cisco IPsec، فإن الملف لا ينتقل بين العملاء۔ المنفذ غير المعتاد أو وضع النفق غير القياسي يضيع عمومًا في ذلك الانتقال۔ احسم أي بروتوكول تقدمه البوابة قبل اختيار أداة۔