الوصول إلى خادم لينكس باستخدام Python Telegram bot

في كثير من الأحيان هناك حالات عندما يكون الوصول إلى الخادم مطلوبًا هنا والآن. ومع ذلك ، فإن اتصال SSH ليس دائمًا الطريقة الأكثر ملاءمة ، لأن رابط SSH العميل أو عنوان الخادم أو المستخدم / كلمة المرور قد لا يكون في متناول اليد. بالطبع ، هناك Webmin ، الذي يبسط الإدارة ، لكنه أيضًا لا يتيح الوصول الفوري.

لذلك قررت تنفيذ حل بسيط ولكنه مثير للاهتمام. وهي كتابة روبوت Telegram ، والذي سيبدأ على الخادم نفسه ، بتنفيذ الأوامر المرسلة إليه وإرجاع النتيجة. بعد أن درست العديد من المقالات حول هذا الموضوع ، أدركت أنه لا يوجد أحد قد وصف هذه التطبيقات حتى الآن.

لقد نفذت هذا المشروع على Ubuntu 16.04 ، ولكن من أجل إطلاق خالي من المتاعب على توزيعات أخرى ، حاولت أن أفعل كل شيء بطريقة عامة.

بوت التسجيل


تسجيل روبوت جديد معBotFather. نرسل له /newbot وأكثر في النص. سنحتاج إلى رمز الروبوت الجديد ومعرف الهوية الخاص بك (يمكنك الحصول عليه ، على سبيل المثال ، من userinfobot ).

إعداد بيثون


لبدء برنامج telebot ، سوف نستخدم مكتبة telebot ( pip install pytelegrambotapi ). باستخدام مكتبة العمليات subprocess ، سنقوم بتنفيذ الأوامر على الخادم.

بوت الاطلاق


على الخادم ، قم بإنشاء ملف bot.py:
nano bot.py

والصق الكود فيه:

 from subprocess import check_output import telebot import time bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")#  user_id = 0 #id   @bot.message_handler(content_types=["text"]) def main(message): if (user_id == message.chat.id): #,     comand = message.text #  try: #   - check_output  exception bot.send_message(message.chat.id, check_output(comand, shell = True)) except: bot.send_message(message.chat.id, "Invalid input") #   if __name__ == '__main__': while True: try:# try    bot.polling(none_stop=True)#  except: time.sleep(10)#   

نستبدل الرمز المميز للبوت فيه بالرمز الذي أصدرهBotFather ، و user_id بقيمة معرّف حسابك. يعد التحقق من هوية المستخدم ضروريًا حتى يتيح لك الروبوت الوصول إلى الخادم الخاص بك فقط. تقوم check_output() بتنفيذ الأمر الذي تم تمريره وإرجاع النتيجة.

يبقى فقط لإطلاق الروبوت. لبدء العمليات على الخادم ، أفضل استخدام screen ( sudo apt-get install screen ):

 screen -dmS ServerBot python3 bot.py 
(حيث يكون "ServerBot" هو معرف العملية)

ستبدأ العملية تلقائيًا في الخلفية. دعنا ندخل في الحوار مع الروبوت ونتأكد من أن كل شيء يعمل كما ينبغي:



مبروك! يقوم الروبوت بتنفيذ الأوامر المرسلة إليه. الآن ، للوصول إلى الخادم ، تحتاج فقط إلى فتح مربع حوار مع الروبوت.

تكرار الأوامر


في كثير من الأحيان ، لمراقبة حالة الخادم لديك لتنفيذ نفس الأوامر. لذلك ، فإن تنفيذ تكرار الأوامر دون إرسالها مرة أخرى سيكون في غير محله.

سننفذ باستخدام الأزرار المضمّنة أسفل الرسائل:

 from subprocess import check_output import telebot from telebot import types #   import time bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")#  user_id = 0 #id   @bot.message_handler(content_types=["text"]) def main(message): if (user_id == message.chat.id): #,     comand = message.text #  markup = types.InlineKeyboardMarkup() #  button = types.InlineKeyboardButton(text="", callback_data=comand) #  markup.add(button) #    try: #   - check_output  exception bot.send_message(user_id, check_output(comand, shell = True, reply_markup = markup)) #       except: bot.send_message(user_id, "Invalid input") #   @bot.callback_query_handler(func=lambda call: True) def callback(call): comand = call.data #     data try:#    - check_output  exception markup = types.InlineKeyboardMarkup() #  button = types.InlineKeyboardButton(text="", callback_data=comand) #    data   markup.add(button) #    bot.send_message(user_id, check_output(comand, shell = True), reply_markup = markup) #       except: bot.send_message(user_id, "Invalid input") #   if __name__ == '__main__': while True: try:# try    bot.polling(none_stop=True)#  except: time.sleep(10)#   

أعد تشغيل الروبوت:

 killall python3 screen -dmS ServerBot python3 bot.py 

تحقق مرة أخرى من أن كل شيء يعمل بشكل صحيح:



بالضغط على الزر الموجود أسفل الرسالة ، يجب على الروبوت أن يعيد الأمر الذي تم إرسال الرسالة منه.

بدلا من الاستنتاج


بالطبع ، لا تتظاهر هذه الطريقة بأنها بديل لطرق الاتصال التقليدية ، ومع ذلك ، فهي تتيح لك معرفة حالة الخادم بسرعة وإرسال أوامر لا تتطلب إخراجًا معقدًا.

Source: https://habr.com/ru/post/ar443846/


All Articles