الوصول إلى خادم 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

شراء استضافة موثوقة للمواقع مع حماية DDoS وخوادم VPS VDS 🔥 اشترِ استضافة مواقع ويب موثوقة مع حماية من هجمات DDoS، وخوادم VPS وVDS | ProHoster