Python-da Telegram botundan istifadə edərək linux serverinə giriş

Çox vaxt serverə girişin burada və indi lazım olduğu vəziyyətlər var. Bununla belə, SSH vasitəsilə qoşulmaq həmişə ən əlverişli yol deyil, çünki əlinizdə SSH müştərisi, server ünvanı və ya istifadəçi/parol kombinasiyası olmaya bilər. Əlbəttə var Webmin, idarəetməni asanlaşdırır, lakin o, həm də ani girişi təmin etmir.

Buna görə sadə, lakin maraqlı bir həll tətbiq etmək qərarına gəldim. Məhz, serverin özündə işə salındıqda ona göndərilən əmrləri yerinə yetirəcək və nəticəni qaytaracaq Telegram botu yazmaq. Oxuyub bir məqalələr Bu mövzuda başa düşdüm ki, hələ heç kim bu cür tətbiqləri təsvir etməyib.

Mən bu layihəni Ubuntu 16.04-də həyata keçirdim, lakin digər paylanmalarda problemsiz işləmək üçün hər şeyi ümumi şəkildə etməyə çalışdım.

Botun qeydiyyatı

@BotFather ilə yeni botu qeydiyyatdan keçirin. Onu göndəririk /newbot və daha sonra mətndə. Bizə yeni bot nişanı və identifikatorunuz lazımdır (onu, məsələn, buradan əldə edə bilərsiniz @userinfobot).

Python hazırlığı

Botu işə salmaq üçün kitabxanadan istifadə edəcəyik telebot (pip install pytelegrambotapi). Kitabxanadan istifadə subprocess serverdə əmrləri yerinə yetirəcəyik.

Botun işə salınması

Serverdə bot.py faylı yaradın:
nano bot.py

Və kodu ona yapışdırın:

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

Biz onun içindəki bot nişanını @BotFather tərəfindən buraxılmış, user_id isə hesabınızın id dəyəri ilə əvəz edirik. İstifadəçi identifikatorunu yoxlamaq lazımdır ki, bot serverinizə yalnız sizə girişi təmin etsin. Funksiya check_output() verilən əmri yerinə yetirir və nəticəni qaytarır.

Yalnız botu işə salmaq qalır. Serverdə işləyən proseslər üçün istifadə etməyi üstün tuturam screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(burada "ServerBot" proses identifikatorudur)

Proses avtomatik olaraq arxa planda işləyəcək. Gəlin botla dialoqa gedək və hər şeyin lazım olduğu kimi işlədiyini yoxlayaq:

Python-da Telegram botundan istifadə edərək linux serverinə giriş

Təbrik edirik! Bot ona göndərilən əmrləri yerinə yetirir. İndi serverə daxil olmaq üçün sadəcə botla dialoq açmaq lazımdır.

Əmr təkrarı

Çox vaxt serverin vəziyyətini izləmək üçün eyni əmrləri yerinə yetirməlisiniz. Buna görə də, onları təkrar göndərmədən təkrar əmrlərin həyata keçirilməsi çox yersiz olacaqdır.

Mesajların altındakı daxili düymələrdən istifadə edərək bunu həyata keçirəcəyik:

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

Botun yenidən işə salınması:

killall python3
screen -dmS ServerBot python3 bot.py

Hər şeyin düzgün işlədiyini bir daha yoxlayaq:

Python-da Telegram botundan istifadə edərək linux serverinə giriş

Mesajın altındakı düyməni sıxmaqla, bot bu mesajın göndərildiyi əmri təkrar etməlidir.

Bunun əvəzinə bir nəticəyə

Əlbəttə ki, bu üsul klassik əlaqə üsullarını əvəz etmir, lakin bu, serverin vəziyyətini tez bir zamanda öyrənməyə və ona mürəkkəb çıxış tələb etməyən əmrlər göndərməyə imkan verir.

Mənbə: www.habr.com

Добавить комментарий