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

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

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

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

تسجيل بوت

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

تحضير بايثون

لتشغيل الروبوت ، سنستخدم المكتبة 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" هو معرف العملية)

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

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

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

تكرار الأمر

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

سنقوم بتنفيذه باستخدام أزرار مضمنة أسفل الرسائل:

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

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

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

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

بدلا من خاتمة

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

المصدر: www.habr.com

إضافة تعليق