Juurdepääs Linux-serverile Pythoniga Telegram-boti abil

Sageli esinevad olukorrad, kus juurdepääs serverile on vajalik kohe. Siiski ei pruugi SSH kaudu ühendamine alati olla kõige mugavam viis, kuna käepärast ei pruugi olla SSH kliendi, serveri aadressi või „kasutaja/parooli” komplekti. Muidugi, on olemas Webmin, mis lihtsustab haldamist, kuid see ei paku ka kohevat juurdepääsu.

Seetõttu otsustasin rakendada lihtsat, kuid huvitavat lahendust. Nimelt — kirjutada Telegrami-bot, mis, käivitades serveris, täidab saadetud käsklusi ja tagastab tulemuse. Uurides mitu artiklites selle teema kohta, sain aru, et keegi polnud sarnaseid lahendusi veel kirjeldanud.

Selle projekti realiseerisin Ubuntu 16.04-l, kuid sujuva käivitamise tagamiseks teistel distributsioonidel püüdsin teha kõik üldiselt.

Boti registreerimine

Registreerime uue boti @BotFather juures. Saadame talle /newbot ja edasi vastavalt tekstile. Me vajame uue boti tokenit ja teie id-d (saab selle näiteks @userinfobot).

saamisega).

Pythoni ettevalmistamine Boti käivitamiseks kasutame teeki (telebotpip install pytelegrambotapi ). Teegi abil subprocess

täidame serveril käske.

Boti käivitamine
nano bot.py

Ja kleepime sellesse koodi:

from subprocess import check_output
import telebot
import time

bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")#boti token
user_id = 0 #teie konto id
@bot.message_handler(content_types=["text"])
def main(message):
   if (user_id == message.chat.id): #kontrollime, et kirjutab tõeliselt omanik
      command = message.text  #sõnumi tekst
      try: #kui käsk ei ole teostatav - check_output viskab erandi
         bot.send_message(message.chat.id, check_output(command, shell = True))
      except:
         bot.send_message(message.chat.id, "Vale sisend") #kui käsk on vale
if __name__ == '__main__':
    while True:
        try:#lisame try, et tagada katkestusteta töö
            bot.polling(none_stop=True)#bot käivitamine
        except:
            time.sleep(10)#kukkumise korral

Asendame selles boti tokeni selle, mille andis @BotFather, ja user_id — teie konto id väärtusega. Kasutaja id kontroll on vajalik, et bot annaks juurdepääsu teie serverile ainult teile. Funktsioon check_output() täidab edastatud käsu ja tagastab tulemuse.

Küsimiseks jääb ainult bot käivitamine. Protsesside käivitamiseks serveris eelistan kasutada ekraan (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(kus „ServerBot“ on protsessi identifikaator)

Protsess käivitub automaatselt taustal. Liigume vestlusesse robotiga ja kontrollime, et kõik töötab nagu peab:

Juurdepääs Linux-serverile Pythoniga Telegram-boti abil

Palju õnne! Robot täidab saadetud käske. Nüüd piisab serverisse pääsemiseks, kui avate vestluse robotiga.

Käskude kordamine

Sageli tuleb serveri seisundi jälgimiseks täita samu käske mitu korda. Seega on käsu kordamise rakendamine ilma nende uuesti saatmiseta väga kasulik.

Rakendame seda inline-nuppude abil sõnumite all:

from subprocess import check_output
import telebot
from telebot import types # Lisa klahve import
import time

bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") # Boti token
user_id = 0 # teie konto id
@bot.message_handler(content_types=["text"])
def main(message):
   if (user_id == message.chat.id): # kontrollime, et just omanik kirjutab
      comand = message.text  # sõnumiteksti
      markup = types.InlineKeyboardMarkup() # loome klaviatuuri
      button = types.InlineKeyboardButton(text="Korrata", callback_data=comand) # loome nupu
      markup.add(button) # lisame nupu klaviatuuri
      try: # kui käsk ei ole teostatav - check_output viskab erandi
         bot.send_message(user_id, check_output(comand, shell=True, reply_markup=markup)) # kutsume käsku ja saadame sõnumi tulemusega
      except:
         bot.send_message(user_id, "Vale sisend") # kui käsk on vale

@bot.callback_query_handler(func=lambda call: True)
def callback(call):
  comand = call.data # loeme käsu nuppu andmest
  try: # kui käsk ei ole teostatav - check_output viskab erandi
     markup = types.InlineKeyboardMarkup() # loome klaviatuuri
     button = types.InlineKeyboardButton(text="Korrata", callback_data=comand) # loome nupu ja edastame andmes käsu
     markup.add(button) # lisame nupu klaviatuuri
     bot.send_message(user_id, check_output(comand, shell=True), reply_markup=markup) # kutsume käsku ja saadame sõnumi tulemusega
  except:
     bot.send_message(user_id, "Vale sisend") # kui käsk on vale

if __name__ == '__main__':
    while True:
        try: # lisame proovimise, et töö oleks katkematu
            bot.polling(none_stop=True) # käivitame boti
        except:
            time.sleep(10) # tõrke korral

Taaskäivitame boti:

killall python3
screen -dmS ServerBot python3 bot.py

Kontrollime jälle, et kõik töötab õigesti:

Juurdepääs Linux-serverile Pythoniga Telegram-boti abil

Sõnumi all oleva nupu vajutamisel peab bot kordama käsku, mille saatmine käivitas selle sõnumi.

Kokkuvõtte asemel

Ilmselgelt ei pretendeeri see meetod klassikaliste ühendusviiside asendamisele, kuid võimaldab kiiresti saada teavet serveri oleku kohta ja saata sellele käske, mis ei nõua keerulist väljundit.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster