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 , 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 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, ).
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:

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:

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
