إن كتابة نصوص برمجية للمهام المتكررة تعمل على تحسين كفاءة إدارة النظام. وهذا أمر رائع بالنسبة للأجهزة المحلية، ولكن ماذا لو كنت تشرف على خوادم بعيدة؟ هل يمكنك تشغيل نص برمجي محلي على جهاز كمبيوتر بعيد؟ نعم!
الاتصالات عن بعد
تتضمن إدارة النظام عن بعد عادةً إنشاء اتصال بالكمبيوتر البعيد عبر سآمن شيوفر لك اتصال SSH موجه أوامر على الكمبيوتر البعيد. يمكنك بعد ذلك المضي قدمًا وإجراء أي صيانة للنظام مطلوبة.
يساعدك Shell Scripting على دمج سلسلة من الأوامر في نص برمجي يمكن تشغيله كما لو كان برنامجًا، مما يؤدي إلى دمج العديد من الإجراءات في تعليمات سطر أوامر واحدة.
مع مرور الوقت، ستتمكن من تعديل وتحسين البرامج النصية الخاصة بك. إذا كان لديك العديد من الأجهزة البعيدة التي يتعين عليك إدارتها، فإن الاحتفاظ بنسخة من كل برنامج نصي على كل خادم محدثة ومحدثة يعد أمرًا مرهقًا ويشكل عبئًا إضافيًا. ويصبح الأمر بمثابة مهمة إدارية في حد ذاته ويستهلك الوقت الذي من المفترض أن يوفره استخدام البرامج النصية.
الحل المثالي هو أن تسمح لك بالاحتفاظ بالبرامج النصية على جهازك المحلي وتشغيلها على أجهزة الكمبيوتر البعيدة عبر اتصال SSH. وهذا من شأنه أن يوفر لك إدارة مبسطة من خلال مجموعة مركزية من البرامج النصية، ويتم تشغيل نفس البرنامج النصي المحدث على جميع أجهزة الكمبيوتر.
يوفر Bash وSSH طريقة للقيام بذلك.
اتصالات SSH بدون كلمة مرور
أفضل طريقة للقيام بذلك هي من خلال الاتصالات بدون كلمة مرور، باستخدام مفاتيح SSH. من خلال إنشاء مفاتيح SSH على جهاز الكمبيوتر المحلي الخاص بك وإرسالها إلى كل جهاز كمبيوتر بعيد، يمكنك الاتصال بأجهزة الكمبيوتر البعيدة بأمان وسهولة، دون مطالبتك بإدخال كلمة مرور في كل مرة.
على الرغم من أنها قد تكون مخيفة للمستخدمين الجدد، إلا أن مفاتيح SSH ليست صعبة حقًا. فهي سهلة التوليد، وبسيطة التثبيت على الخوادم البعيدة، ولا تسبب أي مشاكل عند استخدامها مع SSH. الشرط المسبق الوحيد هو أن يكون لدى أجهزة الكمبيوتر البعيدة خادم SSH
sshd
قيد التشغيل، وأن لديك حساب مستخدم على الكمبيوتر البعيد.
إذا كنت تقوم بالفعل بإدارة النظام عن بعد، فيجب استيفاء هذين المتطلبين بالفعل.
لتوليد زوج مفاتيح SSH، اكتب:
ssh-keygen
إذا كان لديك حساب يسمى “dave” على جهاز كمبيوتر يسمى “fedora-36.local”، فيمكنك إرسال مفتاح SSH العام الخاص بك وتثبيته عليه باستخدام هذا الأمر:
ssh-copy-id dave@fedora-36.local
الآن، سيؤدي إنشاء اتصال SSH بالطريقة المعتادة إلى المصادقة باستخدام مفاتيح SSH. سيتم توجيهك إلى موجه الأوامر على الخادم البعيد دون مطالبتك بإدخال كلمة مرور.
ssh dave@fedora-36.local
تشغيل البرنامج النصي المحلي عن بعد
لإجراء هذه الاختبارات، يكون الخادم البعيد لدينا عبارة عن كمبيوتر يعمل بنظام Linux يسمى “fedora-36.local”. لقد قمنا بإعداد مفاتيح SSH وقمنا باختبار اتصالنا بدون كلمة مرور بالخادم البعيد من الكمبيوتر المحلي لدينا.
إن البرنامج النصي الذي استخدمناه بسيط للغاية. فهو يكتب علامة زمنية في ملف يسمى “timestamp.txt” على الخادم البعيد. لاحظ أن البرنامج النصي ينتهي بأمر الخروج. وهذا مهم، ففي بعض الأنظمة القديمة من الممكن أن يتم تشغيل البرنامج النصي حتى اكتماله، ولكن يظل اتصال SSH مفتوحًا.
#!/bin/bashdate >> timestamp.txt
exit 0
انسخ هذا النص إلى محرر، واحفظه باسم “local.sh”، ثم استخدم chmod
لجعله قابلا للتنفيذ.
chmod +x local.sh
على جهازنا المحلي، سنقوم بتشغيل البرنامج النصي على النحو التالي:
ssh dave@fedora-36.local 'bash -s' < local.sh
وهنا كيفية عمل ذلك.
- ssh dave@fedora-36.local:اتصال SSH الذي نقوم بإجرائه بالجهاز البعيد. يستخدم هذا
ssh
الأمر، وحساب المستخدم الموجود مسبقًا على الخادم البعيد، وعنوان الخادم البعيد. - ‘باش -س’:يؤدي هذا إلى جعل Bash يقرأ الأوامر من مجرى الإدخال القياسي. ويسمح لـ Bash بقراءة الإدخال المعاد توجيهه أو الموجه.
- <local.sh:نحن نقوم بإعادة توجيه البرنامج النصي إلى Bash.
عند تشغيل البرنامج النصي، نعود إلى موجه الأوامر الخاص بالجهاز المحلي. بالانتقال إلى الجهاز البعيد، يمكننا استخدام cat للبحث داخل ملف “timestamp.txt”.
cat timestamp.txt
يمكننا رؤية الطابع الزمني للاتصال الأخير والوحيد حاليًا. يؤدي تشغيل البرنامج النصي المحلي عدة مرات أخرى إلى إضافة طوابع زمنية مقابلة إلى الملف البعيد.
cat timestamp.txt
بالطبع، في موقف حقيقي، سيقوم البرنامج النصي الخاص بك بشيء أكثر فائدة. ولكن حتى مثالنا البسيط يوضح أن البرنامج النصي المحلي يتم تنفيذه على خادم بعيد.
تمرير الحجج إلى البرنامج النصي
يمكنك تمرير وسيطات سطر الأوامر إلى البرنامج النصي. سنقوم بتعديل البرنامج النصي الخاص بنا لتوقع ثلاثة معلمات لسطر الأوامر. يتم إعادة توجيهها إلى ملف “timestamp.txt” مع الطابع الزمني.
احفظ هذا البرنامج النصي باسم “local2.sh”، واجعله قابلاً للتنفيذ باستخدام chmod
.
#!/bin/bashecho "$1 $2 $3" >> timestamp.txt
date >> timestamp.txt
exit 0
الأمر الذي نحتاج إلى استخدامه مشابه للمثال السابق، مع بعض التغييرات.
ssh dave@fedora-36.local "bash -s" -- < local2.sh "How-To\ Geek" "Linux" "Articles"
“الشرطة المزدوجة”--
“يخبر Bash أن ما يلي لا ينبغي اعتباره معلمات سطر أوامر لـ ssh
الأمر. تتبع المعلمات الثلاثة للبرنامج النصي اسم البرنامج النصي، كما هو الحال عادة. لاحظ أننا استخدمنا الشرطة المائلة للخلف “\
“للهروب من المساحة الموجودة في معلمة “How-To\Geek”.
يمكننا التحقق مع cat
أن معلماتنا تم استلامها ومعالجتها بشكل صحيح على الخادم البعيد.
cat timestamp.txt
تشغيل قسم من البرنامج النصي عن بعد
إذا كان لديك برنامج نصي يحتاج إلى إجراء بعض المعالجة المحلية لتحديد الإجراءات التي قد تكون مطلوبة على الخوادم البعيدة، فيمكنك إضافة قسم مباشرة إلى هذا البرنامج النصي لأداء الإجراءات البعيدة نيابة عنك.
يمكننا تحقيق ذلك باستخدام المستندات الموجودة هنا. تتيح لنا المستندات الموجودة هنا إعادة توجيه الأسطر من قسم مُسمّى من البرنامج النصي إلى أمر. يمكن إجراء المعالجة المحلية أعلى وأسفل المستند الموجود هنا.
هذا هو البرنامج النصي “local3.sh”، والذي يحتوي على مستند هنا.
#!/bin/bash# local processing can done here
# remote processing is done here
ssh -T dave@fedora-36.local << _remote_commands
# commands to be run remotely would be added here
cd /home/dave/Documents
# etc.
# Finally, update the timestamp file
echo "Script3.sh:" $(date) >> /home/dave/timestamp.txt
# this is the label that marks the end of the redirection
_remote_commands
# more local processing can be done here
exit 0
نحن نستخدم ssh
الأمر بنفس تفاصيل الاتصال كما في السابق. نحن نتصل كمستخدم “dave” على خادم بعيد يسمى “fedora-36.local”. نحن نستخدم أيضًا -T
خيار (تعطيل تخصيص المحطة الطرفية الوهمية). يمنع هذا الخادم البعيد من توفير محطة طرفية تفاعلية لهذا الاتصال.
“إعادة التوجيه”<<
“يتبعه اسم تسمية. في هذا المثال، نستخدم “_remote_commands.” لا يوجد شيء خاص في هذه التسمية، فهي مجرد تسمية.
يتم إرسال جميع الأوامر التي تظهر على الأسطر التالية لإعادة التوجيه عبر اتصال SSH. تتوقف إعادة التوجيه عند مواجهة العلامة. ثم يستمر تنفيذ البرنامج النصي مع السطر الذي يلي العلامة.
دعنا نشغل البرنامج النصي للمعالجة المحلية/البعيدة المختلطة.
./local3.sh
كما هو متوقع، نرى إدخالاً جديدًا في الملف “timestamp.txt”.
cat timestamp.txt
وسّع نطاق وصولك
إن القدرة على تشغيل البرامج النصية عن بُعد ـ والتي يتم كتابتها وتخزينها وصيانتها محليًا ـ توفر أداة إدارة ملائمة. إن معرفة أن نفس الإصدار من البرنامج النصي يعمل على جميع الخوادم البعيدة يجعل الإدارة أسهل كثيرًا.