पायथनमधील टेलीग्राम बॉट वापरून लिनक्स सर्व्हरवर प्रवेश

बर्‍याचदा अशी परिस्थिती असते जेव्हा सर्व्हरवर प्रवेश करणे येथे आणि आता आवश्यक असते. तथापि, SSH द्वारे कनेक्ट करणे हा नेहमीच सर्वात सोयीचा मार्ग नसतो, कारण तुमच्याकडे कदाचित SSH क्लायंट, सर्व्हर पत्ता किंवा वापरकर्ता/पासवर्ड संयोजन नसेल. अर्थातच आहेत वेबमिन, जे प्रशासन सुलभ करते, परंतु ते त्वरित प्रवेश देखील प्रदान करत नाही.

म्हणून मी एक सोपा पण मनोरंजक उपाय अंमलात आणण्याचे ठरवले. म्हणजे, टेलीग्राम बॉट लिहिण्यासाठी, जे सर्व्हरवरच लॉन्च केल्यावर, त्यास पाठवलेल्या कमांड्सची अंमलबजावणी करेल आणि परिणाम परत करेल. अभ्यास करून अनेक लेख या विषयावर, माझ्या लक्षात आले की अद्याप कोणीही अशा अंमलबजावणीचे वर्णन केलेले नाही.

मी हा प्रकल्प उबंटू 16.04 वर अंमलात आणला, परंतु इतर वितरणांवर त्रास-मुक्त रनसाठी, मी सर्व काही सामान्य पद्धतीने करण्याचा प्रयत्न केला.

बॉट नोंदणी

@BotFather वर नवीन बॉटची नोंदणी करा. आम्ही त्याला पाठवतो /newbot आणि पुढे मजकूरात. आम्हाला नवीन बॉट टोकन आणि तुमचा आयडी लागेल (तुम्ही ते मिळवू शकता, उदाहरणार्थ, येथून @userinfobot).

पायथनची तयारी

बॉट चालवण्यासाठी आपण लायब्ररी वापरू 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

(जेथे "सर्व्हरबॉट" प्रक्रिया आयडी आहे)

प्रक्रिया आपोआप पार्श्वभूमीत चालेल. चला बॉटसह संवादाकडे जाऊ आणि सर्वकाही जसे पाहिजे तसे कार्य करते हे तपासू:

पायथनमधील टेलीग्राम बॉट वापरून लिनक्स सर्व्हरवर प्रवेश

अभिनंदन! बॉट त्याला पाठवलेल्या कमांड्सची अंमलबजावणी करतो. आता, सर्व्हरमध्ये प्रवेश करण्यासाठी, तुम्हाला फक्त बॉटसह संवाद उघडण्याची आवश्यकता आहे.

आदेशाची पुनरावृत्ती

बर्‍याचदा, सर्व्हरच्या स्थितीचे निरीक्षण करण्यासाठी, तुम्हाला समान कमांड कार्यान्वित कराव्या लागतात. म्हणून, आदेशांची पुनरावृत्ती न करता त्या पुन्हा न पाठवता त्यांची अंमलबजावणी करणे फारसे बाहेरचे असेल.

आम्ही संदेशांखालील इनलाइन बटणे वापरून त्याची अंमलबजावणी करू:

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

चला पुन्हा तपासूया की सर्वकाही योग्यरित्या कार्य करते:

पायथनमधील टेलीग्राम बॉट वापरून लिनक्स सर्व्हरवर प्रवेश

संदेशाच्या खाली असलेले बटण दाबून, बॉटने ज्या आदेशावरून हा संदेश पाठवला होता त्याची पुनरावृत्ती करणे आवश्यक आहे.

त्याऐवजी एक निष्कर्ष

अर्थात, ही पद्धत क्लासिक कनेक्शन पद्धतींची बदली असल्याचे भासवत नाही, तथापि, ते आपल्याला सर्व्हरच्या स्थितीबद्दल द्रुतपणे शोधण्याची आणि त्यास जटिल आउटपुटची आवश्यकता नसलेल्या आज्ञा पाठविण्यास अनुमती देते.

स्त्रोत: www.habr.com

एक टिप्पणी जोडा