Qasja në serverin linux duke përdorur Telegram bot në Python

Shumë shpesh ka situata kur qasja në server është e nevojshme këtu dhe tani. Megjithatë, lidhja nëpërmjet SSH nuk është gjithmonë mënyra më e përshtatshme, sepse mund të mos keni në dorë një klient SSH, adresë serveri ose kombinim përdorues/fjalëkalim. Sigurisht që kanë web min, e cila thjeshton administrimin, por gjithashtu nuk ofron akses të menjëhershëm.

Kështu që vendosa të zbatoj një zgjidhje të thjeshtë por interesante. Domethënë, për të shkruar një bot Telegram që, kur të lansohet në vetë server, do të ekzekutojë komandat që i dërgohen dhe do të kthejë rezultatin. Duke studiuar несколько artikuj në këtë temë, kuptova se askush nuk i ka përshkruar ende zbatime të tilla.

Unë e zbatova këtë projekt në Ubuntu 16.04, por për një ekzekutim pa probleme në shpërndarjet e tjera, u përpoqa të bëja gjithçka në një mënyrë të përgjithshme.

Regjistrimi në bot

Regjistro një bot të ri me @BotFather. Ne e dërgojmë atë /newbot dhe më tej në tekst. Do të na duhet një shenjë e re bot dhe ID-ja juaj (mund ta merrni, për shembull, nga @userinfobot).

Përgatitja e Python

Për të ekzekutuar robotin, ne do të përdorim bibliotekën telebot (pip install pytelegrambotapi). Duke përdorur bibliotekën subprocess ne do të ekzekutojmë komanda në server.

Nisja e botit

Krijoni një skedar bot.py në server:
nano bot.py

Dhe ngjisni kodin në të:

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

Ne zëvendësojmë tokenin e botit në të me atë të lëshuar nga @BotFather dhe user_id me vlerën id të llogarisë tuaj. Kontrollimi i ID-së së përdoruesit është i nevojshëm në mënyrë që roboti t'ju ofrojë akses në serverin tuaj vetëm për ju. Funksioni check_output() ekzekuton komandën e dhënë dhe kthen rezultatin.

Mbetet vetëm për të nisur bot. Për ekzekutimin e proceseve në server, unë preferoj të përdor screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(ku "ServerBot" është ID e procesit)

Procesi do të funksionojë automatikisht në sfond. Le të shkojmë në dialog me robotin dhe të kontrollojmë që gjithçka funksionon siç duhet:

Qasja në serverin linux duke përdorur Telegram bot në Python

urime! Bot ekzekuton komandat e dërguara në të. Tani, për të hyrë në server, thjesht duhet të hapni një dialog me robotin.

Përsëritja e komandës

Shpesh, për të monitoruar gjendjen e serverit, duhet të ekzekutoni të njëjtat komanda. Prandaj, zbatimi i komandave të përsëritura pa i ridërguar ato do të jetë shumë i pavend.

Ne do ta zbatojmë atë duke përdorur butonat inline nën mesazhet:

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

Rinisja e robotit:

killall python3
screen -dmS ServerBot python3 bot.py

Le të kontrollojmë përsëri nëse gjithçka funksionon siç duhet:

Qasja në serverin linux duke përdorur Telegram bot në Python

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

Në vend të një përfundimi

Sigurisht, kjo metodë nuk pretendon të jetë një zëvendësim për metodat klasike të lidhjes, megjithatë, ju lejon të mësoni shpejt gjendjen e serverit dhe të dërgoni komanda në të që nuk kërkojnë dalje komplekse.

Burimi: www.habr.com

Shto një koment