Մուտք դեպի Linux սերվեր՝ օգտագործելով Telegram բոտը Python-ում

Բավականին հաճախ լինում են իրավիճակներ, երբ սերվերի մուտքն անհրաժեշտ է այստեղ և հիմա: Այնուամենայնիվ, SSH-ի միջոցով միանալը միշտ չէ, որ ամենահարմար միջոցն է, քանի որ դուք կարող եք ձեռքի տակ չունենալ SSH հաճախորդ, սերվերի հասցե կամ օգտագործողի/գաղտնաբառի համակցություն: Իհարկե ունեն Webmin- ը, որը հեշտացնում է կառավարումը, բայց այն նաև չի ապահովում ակնթարթային մուտք։

Ուստի որոշեցի իրականացնել մի պարզ, բայց հետաքրքիր լուծում. Մասնավորապես, գրել Telegram բոտ, որը, երբ գործարկվի հենց սերվերի վրա, կկատարի իրեն ուղարկված հրամանները և կվերադարձնի արդյունքը։ Ուսումնասիրելով մոտ Հոդվածներ այս թեմայի շուրջ ես հասկացա, որ ոչ ոք դեռ չի նկարագրել նման իրականացումները:

Ես իրականացրեցի այս նախագիծը Ubuntu 16.04-ում, բայց այլ բաշխումների վրա անխափան աշխատելու համար ես փորձեցի ամեն ինչ անել ընդհանուր ձևով:

Բոտի գրանցում

Գրանցեք նոր բոտ @BotFather-ով: Մենք նրան ուղարկում ենք /newbot և հետագա տեքստում: Մեզ անհրաժեշտ կլինի նոր բոտային նշան և ձեր ID-ն (այն կարող եք ստանալ, օրինակ, այստեղից @userinfobot).

Պիթոնի պատրաստում

Բոտը գործարկելու համար մենք կօգտագործենք գրադարանը telebot (pip install pytelegrambotapi) Օգտագործելով գրադարանը subprocess մենք հրամաններ կկատարենք սերվերի վրա:

Բոտի գործարկում

Սերվերում ստեղծեք bot.py ֆայլ.
nano bot.py

Եվ դրա մեջ տեղադրեք կոդը.

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

Մենք դրանում բոտային նշանը փոխարինում ենք @BotFather-ի կողմից թողարկվածով, իսկ user_id-ը՝ ձեր հաշվի id արժեքով։ Օգտատիրոջ id-ի ստուգումն անհրաժեշտ է, որպեսզի բոտը միայն ձեզ ապահովի ձեր սերվերի մուտքը: Գործառույթ check_output() կատարում է տրված հրամանը և վերադարձնում արդյունքը։

Մնում է միայն սկսել բոտը: Սերվերի վրա պրոցեսների գործարկման համար ես նախընտրում եմ օգտագործել screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(որտեղ «ServerBot»-ը գործընթացի ID-ն է)

Գործընթացը ավտոմատ կերպով կաշխատի հետին պլանում: Եկեք գնանք բոտի հետ երկխոսության և ստուգենք, որ ամեն ինչ աշխատում է այնպես, ինչպես պետք է.

Մուտք դեպի Linux սերվեր՝ օգտագործելով Telegram բոտը Python-ում

Շնորհավորում եմ: Բոտը կատարում է իրեն ուղարկված հրամանները։ Այժմ սերվեր մուտք գործելու համար պարզապես անհրաժեշտ է երկխոսություն բացել բոտի հետ։

Հրամանի կրկնություն

Հաճախ սերվերի վիճակը վերահսկելու համար դուք պետք է կատարեք նույն հրամանները: Հետևաբար, կրկնվող հրամանների իրականացումն առանց դրանք նորից ուղարկելու շատ անտեղի կլինի։

Մենք կիրականացնենք այն՝ օգտագործելով ներդիր կոճակները հաղորդագրությունների տակ.

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

Բոտի վերագործարկում.

killall python3
screen -dmS ServerBot python3 bot.py

Եկեք նորից ստուգենք, որ ամեն ինչ ճիշտ է աշխատում.

Մուտք դեպի Linux սերվեր՝ օգտագործելով Telegram բոտը Python-ում

Սեղմելով հաղորդագրության տակ գտնվող կոճակը՝ բոտը պետք է կրկնի հրամանը, որից ուղարկվել է այս հաղորդագրությունը։

Փոխարենը մի եզրակացության

Իհարկե, այս մեթոդը չի հավակնում փոխարինել դասական կապի մեթոդներին, այնուամենայնիվ, այն թույլ է տալիս արագորեն իմանալ սերվերի վիճակի մասին և նրան ուղարկել հրամաններ, որոնք չեն պահանջում բարդ ելք:

Source: www.habr.com

Добавить комментарий