पायथन में टेलीग्राम बॉट का उपयोग करके लिनक्स सर्वर तक पहुंच

अक्सर ऐसी स्थितियाँ होती हैं जब सर्वर तक पहुँच की अभी और यहीं आवश्यकता होती है। हालाँकि, SSH के माध्यम से कनेक्ट करना हमेशा सबसे सुविधाजनक तरीका नहीं होता है, क्योंकि आपके पास SSH क्लाइंट, सर्वर पता, या उपयोगकर्ता/पासवर्ड संयोजन नहीं हो सकता है। बिल्कुल है Webmin, जो प्रशासन को सरल बनाता है, लेकिन यह त्वरित पहुंच भी प्रदान नहीं करता है।

इसलिए मैंने एक सरल लेकिन दिलचस्प समाधान लागू करने का निर्णय लिया। अर्थात्, एक टेलीग्राम बॉट लिखना, जो सर्वर पर लॉन्च होने पर, उसे भेजे गए आदेशों को निष्पादित करेगा और परिणाम लौटाएगा। पढ़ाई की है कई सामग्री इस विषय पर, मुझे एहसास हुआ कि अभी तक किसी ने भी ऐसे कार्यान्वयन का वर्णन नहीं किया है।

मैंने इस प्रोजेक्ट को उबंटू 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

एक टिप्पणी जोड़ें