Aċċess għal server linux bl-użu tal-bot Telegram f'Python

Spiss ikun hemm sitwazzjonijiet meta l-aċċess għas-server huwa meħtieġ hawn u issa. Madankollu, il-konnessjoni permezz ta' SSH mhux dejjem hija l-aktar mod konvenjenti, għaliex jista' jkun li ma jkollokx klijent SSH, indirizz tas-server, jew kombinazzjoni ta' utent/password f'idejna. Naturalment għandhom web min, li tissimplifika l-amministrazzjoni, iżda wkoll ma tipprovdix aċċess immedjat.

Għalhekk iddeċidejt li nimplimenta soluzzjoni sempliċi iżda interessanti. Jiġifieri, biex tikteb Telegram bot li, meta jitnieda fuq is-server innifsu, jesegwixxi l-kmandi mibgħuta lilu u jirritorna r-riżultat. Wara li studja xi artikoli fuq dan is-suġġett, indunajt li ħadd għadu ma ddeskriva implimentazzjonijiet bħal dawn.

Implimentajt dan il-proġett fuq Ubuntu 16.04, iżda għal tmexxija mingħajr problemi fuq distribuzzjonijiet oħra, ippruvajt nagħmel kollox b'mod ġenerali.

Reġistrazzjoni tal-bot

Irreġistra bot ġdid ma' @BotFather. Nibagħtuh /newbot u aktar fit-test. Ikollna bżonn token tal-bot ġdid u l-id tiegħek (tista’ tiksibha, pereżempju, minn @userinfobot).

Preparazzjoni tal-python

Biex tħaddem il-bot, se nużaw il-librerija telebot (pip install pytelegrambotapi). Uża l-librerija subprocess aħna se tesegwixxi kmandi fuq is-server.

Tnedija tal-bot

Oħloq fajl bot.py fuq is-server:
nano bot.py

U waħħal il-kodiċi fih:

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

Nissostitwixxu t-token tal-bot fih b'dak maħruġ minn @BotFather, u user_id bil-valur id tal-kont tiegħek. Il-verifika tal-id tal-utent hija meħtieġa sabiex il-bot jipprovdi aċċess għas-server tiegħek lilek biss. Funzjoni check_output() jesegwixxi l-kmand mogħti u jirritorna r-riżultat.

Jibqa 'biss li jibda l-bot. Għat-tmexxija tal-proċessi fuq is-server, nippreferi nuża screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(fejn "ServerBot" hija l-ID tal-proċess)

Il-proċess se jaħdem awtomatikament fl-isfond. Ejja mmorru għad-djalogu mal-bot u ċċekkja li kollox jaħdem kif suppost:

Aċċess għal server linux bl-użu tal-bot Telegram f'Python

Prosit! Il-bot jesegwixxi l-kmandi mibgħuta lilu. Issa, sabiex taċċessa s-server, għandek bżonn biss li tiftaħ djalogu mal-bot.

Ripetizzjoni tal-kmand

Ħafna drabi, biex tissorvelja l-istat tas-server, għandek tesegwixxi l-istess kmandi. Għalhekk, l-implimentazzjoni tar-repetizzjoni tal-kmandi mingħajr ma terġa 'tibgħathom se tkun ferm barra minn postu.

Aħna se nimplimentah billi tuża buttuni inline taħt il-messaġġi:

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

Nibda mill-ġdid il-bot:

killall python3
screen -dmS ServerBot python3 bot.py

Ejja nerġgħu niċċekkjaw li kollox jaħdem sew:

Aċċess għal server linux bl-użu tal-bot Telegram f'Python

Billi tagħfas il-buttuna taħt il-messaġġ, il-bot irid jirrepeti l-kmand minn fejn intbagħat dan il-messaġġ.

Minflok ma tikkonkludi

Naturalment, dan il-metodu ma jippretendix li jkun sostitut għall-metodi klassiċi ta 'konnessjoni, madankollu, jippermettilek li ssir taf malajr dwar l-istat tas-server u tibgħatlu kmandi li ma jeħtiġux output kumpless.

Sors: www.habr.com

Żid kumment