Akses në serverin linux me anë të një boti Telegram në Python

Shpesh ndodhin situata kur nevojitet qasje në server menjëherë. Megjithatë, lidhja përmes SSH nuk është gjithmonë mënyra më e përshtatshme, sepse ndoshta nuk kemi një klient SSH, adresën e serverit ose çiftin "përdorues/kontratë". Sigurisht, ka Webmin, i cili lehtëson administrimin, por ai gjithashtu nuk ofron qasje të menjëhershme.

Prandaj, vendosa tĂ« zbatoj njĂ« zgjidhje tĂ« thjeshtĂ«, por interesante. Konkretisht — tĂ« shkruaj njĂ« bot Telegram-i, i cili, duke u nisur nga vetĂ« serveri, do tĂ« kryejĂ« komandat qĂ« i dĂ«rgohen dhe do tĂ« kthejĂ« rezultatet. Pas studimit disa artikull nĂ« kĂ«tĂ« temĂ«, kuptova se askush nuk kishte pĂ«rshkruar realizime tĂ« ngjashme.

Ky projekt e realizova në Ubuntu 16.04, por për të siguruar një ekzekutim pa probleme në distribuida të tjera, përpiqem ta bëj gjithçka në një mënyrë universale.

Regjistrimi i botit

Regjistroni një bot të ri te @BotFather. Dërgoni atij /newbot dhe vazhdoni sipas tekstit. Na nevojitet tokeni i botit të ri dhe id juaj (mund ta merrni, për shembull, te @userinfobot).

Përgatitja e Pythonit

Për të ekzekutuar botin, ne do të përdorim bibliotekën telebot (pip install pytelegrambotapi). Me ndihmën e bibliotekës subprocess , do të kryejmë komandat në server.

Nisja e botit

NĂ« server krijoni skedarin bot.py:
nano bot.py

Dhe futni në të kodin:

from subprocess import check_output
import telebot
import time

bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")#token i botit
user_id = 0 #id i llogarisë tuaj
@bot.message_handler(content_types=["text"])
def main(message):
   if (user_id == message.chat.id): #kontrollojmë se kush po shkruan
      comand = message.text  #teksti i mesazhit
      try: #nëse komanda nuk ekzekutohet - check_output do të japë një përjashtim
         bot.send_message(message.chat.id, check_output(comand, shell = True))
      except:
         bot.send_message(message.chat.id, "Input i pavlefshëm") #nëse komanda është e papërshtatshme
if __name__ == '__main__':
    while True:
        try:#shto try për funksionim të vazhdueshëm
            bot.polling(none_stop=True)#nisja e botit
        except:
            time.sleep(10)#në rast të rënies

ZĂ«vendĂ«soni nĂ« tĂ« tokenin e botit me atĂ« qĂ« iu dha @BotFather dhe user_id — me vlerĂ«n id tĂ« llogarisĂ« tuaj. Kontrollimi i id tĂ« pĂ«rdoruesit Ă«shtĂ« i nevojshĂ«m qĂ« boti t'ju japĂ« qasje nĂ« serverin tuaj vetĂ«m juve. Funksioni check_output() ekzekuton komandĂ«n e dĂ«rguar dhe kthen rezultatin.

Tani mbetet vetëm të nisim botin. Për të nisur proceset në server, unë preferoj të përdor screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(ku "ServerBot" është identifikuesi i procesit)

Procesi do të nisë automatikisht në modin sfond. Le të kalojmë në bisedën me robotin dhe të verifikojmë që gjithçka funksionon siç duhet:

Akses në serverin linux me anë të një boti Telegram në Python

Urime! Roboti po ekzekuton komandat që i dërgoni. Tani, për të aksesuar serverin, mjafton të hapni bisedën me robotin.

Përsëritja e komandave

Shpesh, për monitorimin e gjendjes së serverit është e nevojshme të ekzekutoni të njëjtat komanda. Prandaj, zbatimi i përsëritjes së komandave pa i dërguar ato sërish do të ishte shumë i dobishëm.

Do ta zbatojmë me anë të butonave inline nën mesazhet:

from subprocess import check_output
import telebot
from telebot import types #Shtojmë importin e butonave
import time

bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")#Tokeni i robotit
user_id = 0 #id i llogarisë suaj
@bot.message_handler(content_types=["text"])
def main(message):
   if (user_id == message.chat.id): #kontrollojmë nëse po shkruan pikërisht pronari
      comand = message.text  #teksti i mesazhit
      markup = types.InlineKeyboardMarkup() #krijojmë tastierën
      button = types.InlineKeyboardButton(text="Përsërit", callback_data=comand) #krijojmë butonin
      markup.add(button) #shtojmë butonin në tastierë
      try: #nëse komanda nuk është ekzekutabile - check_output do të hedhi një exception
         bot.send_message(user_id, check_output(comand, shell = True,  reply_markup = markup)) #thërrasim komandën dhe dërgojmë një mesazh me rezultatin
      except:
         bot.send_message(user_id, "Input i pavlefshëm") #nëse komanda është e paplotë

@bot.callback_query_handler(func=lambda call: True)
def callback(call):
  comand = call.data #lexojmë komandën nga fusha e butonit data
  try:#nëse komanda nuk është ekzekutabile - check_output do të hedhi një exception
     markup = types.InlineKeyboardMarkup() #krijojmë tastierën
     button = types.InlineKeyboardButton(text="Përsërit", callback_data=comand) #krijojmë butonin dhe në data dërgojmë komandën
     markup.add(button) #shtojmë butonin në tastierë
     bot.send_message(user_id, check_output(comand, shell = True), reply_markup = markup) #thërrasim komandën dhe dërgojmë një mesazh me rezultatin
  except:
     bot.send_message(user_id, "Input i pavlefshëm") #nëse komanda është e paplotë

if __name__ == '__main__':
    while True:
        try:#shtojmë try për funksionim të vazhdueshëm
            bot.polling(none_stop=True)#nisim robotin
        except:
            time.sleep(10)#në rast të rënies

Rinisni robotin:

killall python3
screen -dmS ServerBot python3 bot.py

Sërish do të kontrollojmë që gjithçka funksionon siç duhet:

Akses në serverin linux me anë të një boti Telegram në Python

Duke klikuar butonin nën mesazhin, roboti duhet të përsërisë komandën nga e cila është dërguar ky mesazh.

Në përfundim

Padyshim, ky metodë nuk pretendohet të jetë zëvendësim për mënyrat klasike të lidhjes, megjithatë, ai lejon të dihet shpejt për gjendjen e serverit dhe të dërgohen komanda që nuk kërkojnë një dalje të komplikuar.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster