Upataji wa seva ya linux kwa kutumia Telegraph bot huko Python

Mara nyingi kuna hali wakati ufikiaji wa seva unahitajika hapa na sasa. Walakini, kuunganisha kupitia SSH sio njia rahisi kila wakati, kwa sababu unaweza usiwe na mteja wa SSH, anwani ya seva, au mchanganyiko wa mtumiaji/nenosiri karibu. Bila shaka kuwa Webmin, ambayo hurahisisha utawala, lakini pia haitoi ufikiaji wa papo hapo.

Kwa hiyo niliamua kutekeleza suluhisho rahisi lakini la kuvutia. Yaani, kuandika bot ya Telegram ambayo, ikizinduliwa kwenye seva yenyewe, itatekeleza amri zilizotumwa kwake na kurudisha matokeo. Baada ya kusoma baadhi makala juu ya mada hii, niligundua kuwa hakuna mtu bado ameelezea utekelezaji kama huo.

Nilitekeleza mradi huu mnamo Ubuntu 16.04, lakini kwa uzinduzi usio na matatizo kwenye usambazaji mwingine, nilijaribu kufanya kila kitu kwa umbo la jumla.

Usajili wa kijibu

Sajili roboti mpya na @BotFather. Tunamtuma /newbot na zaidi katika maandishi. Tutahitaji tokeni mpya ya bot na kitambulisho chako (unaweza kuipata, kwa mfano, kutoka @userinfobot).

Maandalizi ya chatu

Ili kuendesha bot, tutatumia maktaba telebot (pip install pytelegrambotapi) Kwa kutumia maktaba subprocess tutafanya amri kwenye seva.

Uzinduzi wa bot

Unda faili ya bot.py kwenye seva:
nano bot.py

Na ubandike msimbo ndani yake:

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

Tunabadilisha tokeni ya roboti ndani yake na ile iliyotolewa na @BotFather, na user_id na thamani ya kitambulisho cha akaunti yako. Kuangalia kitambulisho cha mtumiaji inahitajika ili bot kutoa ufikiaji wa seva yako kwako tu. Kazi check_output() hutekeleza amri uliyopewa na kurudisha matokeo.

Inabakia tu kuanza bot. Kwa kuendesha michakato kwenye seva, napendelea kutumia screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(ambapo "ServerBot" ndio kitambulisho cha mchakato)

Mchakato utaendesha kiotomatiki nyuma. Wacha tuende kwenye mazungumzo na roboti na angalia ikiwa kila kitu kinafanya kazi kama inavyopaswa:

Upataji wa seva ya linux kwa kutumia Telegraph bot huko Python

Hongera! Kijibu hutekeleza amri zilizotumwa kwake. Sasa, ili kufikia seva, unahitaji tu kufungua mazungumzo na bot.

Amri kurudia

Mara nyingi, kufuatilia hali ya seva, unapaswa kutekeleza amri sawa. Kwa hiyo, utekelezaji wa kurudia amri bila kuwatuma tena utakuwa nje ya mahali.

Tutaitekeleza kwa kutumia vifungo vya ndani chini ya ujumbe:

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

Kuanzisha upya bot:

killall python3
screen -dmS ServerBot python3 bot.py

Wacha tuangalie tena ikiwa kila kitu kinafanya kazi kwa usahihi:

Upataji wa seva ya linux kwa kutumia Telegraph bot huko Python

Kwa kushinikiza kifungo chini ya ujumbe, bot lazima kurudia amri ambayo ujumbe huu ulitumwa.

Badala ya hitimisho

Kwa kweli, njia hii haijifanya kuwa mbadala wa njia za uunganisho wa kawaida, hata hivyo, hukuruhusu kujua haraka hali ya seva na kutuma amri kwake ambazo haziitaji pato ngumu.

Chanzo: mapenzi.com

Nunua upangishaji wa kuaminika wa tovuti zilizo na ulinzi wa DDoS, seva za VPS VDS 🔥 Nunua upangishaji wa tovuti unaoaminika kwa ulinzi wa DDoS, seva za VPS VDS | ProHoster