Zougang zum Linux Server benotzt Telegram Bot am Python

Ganz dacks ginn et Situatiounen, wou den Zougang zum Server hei an elo gebraucht gëtt. Wéi och ëmmer, d'Verbindung iwwer SSH ass net ëmmer déi bequemste Method, well Dir vläicht keen SSH Client, Serveradress oder Benotzer / Passwuert Kombinatioun bei der Hand hutt. Natierlech hunn Webmin, wat d'Verwaltung vereinfacht, awer et gëtt och keen direkten Zougang.

Also hunn ech beschloss eng einfach awer interessant Léisung ëmzesetzen. Schreift nämlech en Telegram Bot, deen, wann se um Server selwer lancéiert gëtt, d'Befehle ausféiert, déi dohinner geschéckt ginn an d'Resultat zréckginn. Studéiert hunn e puer Artikelen Zu dësem Thema hunn ech gemierkt datt nach keen esou Implementatiounen beschriwwen huet.

Ech hunn dëse Projet op Ubuntu 16.04 implementéiert, awer fir problemfräi Start op aner Verdeelungen hunn ech probéiert alles op eng allgemeng Manéier ze maachen.

Bot Aschreiwung

En neie Bot mat @BotFather registréieren. Mir schécken et him /newbot a weider am Text. Mir brauchen en Token fir den neie Bot an Är ID (Dir kënnt et zum Beispill vun @userinfobot).

Python Virbereedung

Fir de Bot ze starten benotze mir d'Bibliothéik telebot (pip install pytelegrambotapi). Benotzen d'Bibliothéik subprocess Mir wäerte Kommandoen um Server ausféieren.

Lafen engem Bot

Um Server kreéiere mir d'bot.py Datei:
nano bot.py

A paste de Code an et:

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)#в случае падения

Mir ersetzen de Bot Token dran duerch dee vum @BotFather erausginn, an de User_id mam ID Wäert vun Ärem Kont. D'Benotzer ID z'iwwerpréiwen ass néideg sou datt de Bot Zougang zu Ärem Server nëmmen Iech gëtt. Funktioun check_output() fiert de passéierte Kommando aus a gëtt d'Resultat zréck.

Alles wat bleift ass de Bot ze starten. Fir Prozesser um Server ze lafen, déi ech léiwer benotzen screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(wou "ServerBot" de Prozess ID ass)

De Prozess fänkt automatesch am Hannergrond un. Loosst eis mam Bot an den Dialog goen a kucken ob alles funktionnéiert wéi et soll:

Zougang zum Linux Server benotzt Telegram Bot am Python

Gratulatioun! De Bot exekutéiert Kommandoen, déi him geschéckt ginn. Elo, fir op de Server ze kommen, musst Dir just en Dialog mam Bot opmaachen.

Widderhuelen Kommandoen

Oft, fir den Zoustand vum Server ze iwwerwaachen, musst Dir déiselwecht Kommandoen ausféieren. Dofir wier d'Ëmsetze vu Widderhuelungsbefehl ouni se erëm ze schécken ganz gëeegent.

Mir implementéieren et mat Inline Knäppercher ënner de Messagen:

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)#в случае падения

Restart de Bot:

killall python3
screen -dmS ServerBot python3 bot.py

Loosst eis nach eng Kéier kucken ob alles richteg funktionnéiert:

Zougang zum Linux Server benotzt Telegram Bot am Python

Wann Dir op de Knäppchen ënnert der Noriicht klickt, muss de Bot de Kommando widderhuelen, aus deem de Message geschéckt gouf.

Amplaz vun enger Konklusioun

Natierlech mécht dës Method net als Ersatz fir klassesch Verbindungsmethoden, awer et erlaabt Iech séier iwwer den Zoustand vum Server erauszefannen an et Kommandoen ze schécken déi keng komplex Ausgab erfuerderen.

Source: will.com

Setzt e Commentaire