Zugriff auf den Linux-Server über einen Telegram-Bot in Python

Es gibt häufig Situationen, in denen der Zugang zum Server sofort benötigt wird. Allerdings ist die SSH-Verbindung nicht immer der bequemste Weg, da möglicherweise kein SSH-Client, die Serveradresse oder die Kombination „Benutzer/Passwort“ zur Hand ist. Natürlich gibt es Webmin, das die Verwaltung erleichtert, aber es bietet keinen sofortigen Zugang.

Deshalb habe ich mich entschieden, eine einfache, aber interessante Lösung zu entwickeln. Genauer gesagt – ich wollte einen Telegram-Bot schreiben, der, gestartet auf dem Server, empfangene Befehle ausführt und die Ergebnisse zurückmeldet. Nachdem ich mehrere Artikel darüber gelesen habe, wurde mir klar, dass bisher niemand solche Umsetzungen beschrieben hat.

Dieses Projekt habe ich auf Ubuntu 16.04 realisiert, aber um einen reibungslosen Betrieb auf anderen Distributionen zu gewährleisten, habe ich versucht, alles allgemein zu halten.

Registrierung des Bots

Wir registrieren einen neuen Bot über @BotFather. Wir senden ihm /newbot und so weiter. Wir benötigen das Token des neuen Bots und Ihre ID (diese kann man beispielsweise bei @userinfobot).

erhalten).

Vorbereitung von Python Für den Betrieb des Bots verwenden wir die Bibliothek (telebotpip install pytelegrambotapi ). Mit der Bibliothek subprocess

werden wir Befehle auf dem Server ausführen.

Erstellen Sie die Datei bot.py auf dem Server:
nano bot.py

Fügen Sie den Code ein:

from subprocess import check_output
import telebot
import time

bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")  # Bot-Token
user_id = 0  # ID Ihres Kontos
@bot.message_handler(content_types=["text"])
def main(message):
    if (user_id == message.chat.id):  # Überprüfen, ob der Verfasser der Eigentümer ist
        comand = message.text  # Text der Nachricht
        try:  # wenn der Befehl nicht ausführbar ist, gibt check_output eine Ausnahme aus
            bot.send_message(message.chat.id, check_output(comand, shell=True))
        except:
            bot.send_message(message.chat.id, "Ungültige Eingabe")  # wenn der Befehl nicht korrekt ist
if __name__ == '__main__':
    while True:
        try:  # fügen Sie try für einen stabilen Betrieb hinzu
            bot.polling(none_stop=True)  # Bot starten
        except:
            time.sleep(10)  # bei einem Absturz

Ersetzen Sie darin den Bot-Token durch den von @BotFather bereitgestellten und user_id durch die ID Ihres Kontos. Die Überprüfung der Benutzer-ID ist notwendig, damit der Bot nur Ihnen Zugriff auf Ihren Server gewährt. Funktion check_output() führt den übergebenen Befehl aus und gibt das Ergebnis zurück.

Sie müssen nur den Bot starten. Um Prozesse auf dem Server zu starten, bevorzuge ich screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(wobei „ServerBot“ die Prozess-ID ist)

Der Prozess wird automatisch im Hintergrund gestartet. Lassen Sie uns in den Dialog mit dem Bot wechseln und überprüfen, ob alles wie gewünscht funktioniert:

Zugriff auf den Linux-Server über einen Telegram-Bot in Python

Herzlichen Glückwunsch! Der Bot führt die ihm gesendeten Befehle aus. Um Zugang zum Server zu erhalten, müssen Sie lediglich den Dialog mit dem Bot öffnen.

Befehlswiederholung

Oftmals müssen dieselben Befehle zur Überwachung des Serverstatus ausgeführt werden. Daher wird die Implementierung einer Befehlswiederholung ohne erneute Eingabe sehr nützlich sein.

Wir werden dies mithilfe von Inline-Buttons unter den Nachrichten implementieren:

from subprocess import check_output
import telebot
from telebot import types # Fügen Sie den Import von Schaltflächen hinzu
import time

bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") # Token des Bots
user_id = 0 # ID Ihres Kontos
@bot.message_handler(content_types=["text"])
def main(message):
   if (user_id == message.chat.id): # Überprüfen, dass der Besitzer schreibt
      comand = message.text  # Text der Nachricht
      markup = types.InlineKeyboardMarkup() # Erstellen der Tastatur
      button = types.InlineKeyboardButton(text="Wiederholen", callback_data=comand) # Erstellen der Schaltfläche
      markup.add(button) # Hinzufügen der Schaltfläche zur Tastatur
      try: # Wenn der Befehl nicht ausführbar ist - check_output wirft eine Ausnahme
         bot.send_message(user_id, check_output(comand, shell = True, reply_markup = markup)) # Befehl ausführen und Ergebnisnachricht senden
      except:
         bot.send_message(user_id, "Ungültige Eingabe") # Wenn der Befehl ungültig ist

@bot.callback_query_handler(func=lambda call: True)
def callback(call):
  comand = call.data # Befehl aus dem Schaltflächenfeld lesen
  try: # Wenn der Befehl nicht ausführbar ist - check_output wirft eine Ausnahme
     markup = types.InlineKeyboardMarkup() # Erstellen der Tastatur
     button = types.InlineKeyboardButton(text="Wiederholen", callback_data=comand) # Erstellen der Schaltfläche und Befehl zur data hinzufügen
     markup.add(button) # Hinzufügen der Schaltfläche zur Tastatur
     bot.send_message(user_id, check_output(comand, shell = True), reply_markup = markup) # Befehl ausführen und Ergebnisnachricht senden
  except:
     bot.send_message(user_id, "Ungültige Eingabe") # Wenn der Befehl ungültig ist

if __name__ == '__main__':
    while True:
        try: # Try hinzufügen für unterbrechungsfreien Betrieb
            bot.polling(none_stop=True) # Bot starten
        except:
            time.sleep(10) # Bei Absturz

Neustart des Bots:

killall python3
screen -dmS ServerBot python3 bot.py

Lassen Sie uns überprüfen, ob alles korrekt funktioniert:

Zugriff auf den Linux-Server über einen Telegram-Bot in Python

Durch Drücken der Taste unter der Nachricht sollte der Bot den Befehl wiederholen, von dem diese Nachricht gesendet wurde.

Abschließend

Zweifellos stellt diese Methode keinen Ersatz für die klassischen Verbindungsmethoden dar, ermöglicht jedoch eine schnelle Abfrage des Serverstatus und das Senden einfacher Befehle ohne komplexe Ausgaben.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster