Telegram bot ilə Linux serverinə giriş

Tez-tez serverə giriş lazım olanda bu, burada və indi baş verir. Lakin, SSH ilə qoşulmaq ən rahat metod olmaya bilər, çünki əlinizdə SSH müştərisi, server ünvanı və ya "istifadəçi/parol" cütlüyü olmaya bilər. Əlbəttə ki, var Webmin, idarəçiliyi asanlaşdırır, lakin bu da anlıq giriş imkanı vermir.

Buna görə də mən sadə, lakin maraqlı bir həll tətbiq etməyə qərar verdim. Yəni — serverdə işləyən və göndərilən komandaları icra edib nəticəni qaytaran bir Telegram botu yazmaq. Araşdıraraq bir neçə məqalə baxdıqdan sonra, belə bir tətbiqin hələ də heç kəs tərəfindən təsvir edilmədiyini anladım.

Bu layihəni Ubuntu 16.04-də həyata keçirdim, lakin problem olmadan digər distro-larda işləməsi üçün hər şeyi ümumi formada etməyə çalışdım.

Botun qeydiyyatı

@BotFather ilə yeni bir bot qeydiyyatdan keçiririk. Ona göndəririk /newbot və davam edir. Bizə yeni botun tokeni və sizin id-niz lazım olacaq (onu, məsələn, @userinfobot).

Python hazırlığı

Botu işə salmaq üçün telebot (pip install pytelegrambotapi) kitabxanasını istifadə edəcəyik. Kitabxananın köməyi ilə subprocess serverdə komandaları yerinə yetirəcəyik.

Botu işə salmaq

Serverdə bot.py adlı bir fayl yaradırıq:
nano bot.py

Və oraya kodu yapışdırırıq:

from subprocess import check_output
import telebot
import time

bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")#botun tokeni
user_id = 0 #sizin hesabınızın id-si
@bot.message_handler(content_types=["text"])
def main(message):
   if (user_id == message.chat.id): #mülk sahibinin yazdığını yoxlayırıq
      comand = message.text  #mesajın mətni
      try: #əgər icra edilə bilən komanda deyilsə - check_output istisna verəcək
         bot.send_message(message.chat.id, check_output(comand, shell = True))
      except:
         bot.send_message(message.chat.id, "Etibarsız giriş") #əgər komanda düzgün deyilsə
if __name__ == '__main__':
    while True:
        try:#daima işləmək üçün try əlavə edirik
            bot.polling(none_stop=True)#botu işə salırıq
        except:
            time.sleep(10)#çöküntü halında

Orada botun tokenini @BotFather tərəfindən verdiyi ilə və user_id-ni öz hesabınızın id-si ilə dəyişdiririk. İstifadəçi id-sinin yoxlanılması botun serverinizə giriş imkanı yalnız sizə verməsi üçün zəruridir. Funksiya check_output() göndərilən komandaları icra edir və nəticəni qaytarır.

Sadəcə botu işə salmaq qalır. Serverdə prosesləri işə salmaq üçün mən screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(burada «ServerBot» — prosesin identifikatorudur)

Proses avtomatik olaraq arxa planda başlayacaq. Botla dialoqa keçək və hər şeyin düzgün işlədiyini yoxlayaq:

Telegram bot ilə Linux serverinə giriş

Təbriklər! Bot sizə göndərilən komandaları icra edir. İndi serverə giriş üçün yalnız botla dialoqu açmaq kifayətdir.

Komanda təkrarı

Tez-tez serverin vəziyyətini monitorinq etmək üçün eyni komandaları icra etmək lazım olur. Beləliklə, komandaların təkrarı üçün onların yenidən göndərilmədən icra edilməsini təmin etmək çox məqbul olacaq.

Biz inline düymələr vasıtası ilə mesajların altında həyata keçirəcəyik:

from subprocess import check_output
import telebot
from telebot import types #Düymələr üçün idxal edirik
import time

bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")#Botun tokeni
user_id = 0 #sizin hesabınızın id-si
@bot.message_handler(content_types=["text"])
def main(message):
   if (user_id == message.chat.id): #sahib olduğunu yoxlayırıq
      comand = message.text  #mesajın mətnini
      markup = types.InlineKeyboardMarkup() #klaviatura yaradırıq
      button = types.InlineKeyboardButton(text="Təkrarla", callback_data=comand) #düymə yaradırıq
      markup.add(button) #düyməni klaviaturaya əlavə edirik
      try: #əgər əmrlə əlaqəli deyiləmsə - check_output istisna verəcək
         bot.send_message(user_id, check_output(comand, shell = True,  reply_markup = markup)) #əmri yerinə yetiririk və nəticə ilə mesaj göndəririk
      except:
         bot.send_message(user_id, "Qeyri-dəqiq giriş") #əgər əmrlər düzgün deyilsə

@bot.callback_query_handler(func=lambda call: True)
def callback(call):
  comand = call.data #düymənin data sahəsindən əmri oxuyuruq
  try:#əgər əmrlə əlaqəli deyiləmsə - check_output istisna verəcək
     markup = types.InlineKeyboardMarkup() #klaviatura yaradırıq
     button = types.InlineKeyboardButton(text="Təkrarla", callback_data=comand) #düymə yaradırıq və data daxilində əmri göndəririk
     markup.add(button) #düyməni klaviaturaya əlavə edirik
     bot.send_message(user_id, check_output(comand, shell = True), reply_markup = markup) #əmri yerinə yetiririk və nəticə ilə mesaj göndəririk
  except:
     bot.send_message(user_id, "Qeyri-dəqiq giriş") #əgər əmrlər düzgün deyilsə

if __name__ == '__main__':
    while True:
        try:#kəsilməz iş üçün try əlavə edirik
            bot.polling(none_stop=True)#botu işə salırıq
        except:
            time.sleep(10)#qəza halında

Botu yenidən işə salırıq:

killall python3
screen -dmS ServerBot python3 bot.py

Yenidən yoxlayırıq ki, hər şey düzgün işləyir:

Telegram bot ilə Linux serverinə giriş

Mesajın altında düyməyə basdıqda bot, həmin mesajı göndərən əmri təkrar etməlidir.

Nəticə olaraq

Şübhəsiz ki, bu metod klassik qoşulma üsullarının əvəzinə keçməyi iddia etmir, lakin serverin vəziyyətini kifayət qədər tez öyrənməyə və onu mürəkkəb nəticələr tələb etməyən əmrlərlə göndərməyə imkan verir.

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster