Accessu à u servitore Linux utilizendu Telegram bot in Python

Piuttostu spessu ci sò situazioni quandu l'accessu à u servitore hè necessariu quì è avà. Tuttavia, a cunnessione via SSH ùn hè micca sempre u modu più còmuda, perchè ùn pudete micca avè un cliente SSH, indirizzu di u servitore, o cumminazione utente / password à manu. Di sicuru avè Webmin, chì simplificà l'amministrazione, ma ancu ùn furnisce micca accessu immediatu.

Allora decisu di implementà una suluzione simplice ma interessante. Vale à dì, per scrive un bot Telegram chì, quandu lanciatu nantu à u servitore stessu, eseguirà i cumandamenti mandati à ellu è rinvià u risultatu. Dopu avè studiatu parechji articuli nantu à questu tema, aghju realizatu chì nimu hà ancu descrittu tali implementazioni.

Aghju implementatu stu prughjettu nantu à Ubuntu 16.04, ma per una corsa senza prublemi in altre distribuzioni, aghju pruvatu à fà tuttu in modu generale.

Registrazione di u bot

Registrate un novu bot cù @BotFather. Li mandemu /newbot è più in u testu. Avemu bisognu di un novu token di bot è u vostru id (pudete uttene, per esempiu, da @userinfobot).

Preparazione di Python

Per eseguisce u bot, avemu aduprà a biblioteca telebot (pip install pytelegrambotapi). Utilizà a biblioteca subprocess eseguiremu cumandamenti nantu à u servitore.

Lanciamentu di u bot

Crea un schedariu bot.py nantu à u servitore:
nano bot.py

È incollà u codice in questu:

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

Sustituemu u token di bot in questu cù quellu emessu da @BotFather, è user_id cù u valore d'ID di u vostru contu. A verificazione di l'ID d'utilizatore hè necessariu per chì u bot furnisce accessu à u vostru servitore solu per voi. Funzione check_output() esegue u cumandamentu datu è torna u risultatu.

Resta solu per inizià u bot. Per eseguisce prucessi nantu à u servitore, preferimu aduprà screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(induve "ServerBot" hè l'ID di prucessu)

U prucessu sarà in autumàticu in u sfondate. Andemu à u dialogu cù u bot è verificate chì tuttu funziona cum'è deve:

Accessu à u servitore Linux utilizendu Telegram bot in Python

Felicitazioni! U bot eseguisce i cumandamenti mandati à ellu. Avà, per accede à u servitore, basta à apre un dialogu cù u bot.

Ripetizione di cumanda

Spessu, per monitorizà u statu di u servitore, avete da eseguisce i stessi cumandamenti. Dunque, l'implementazione di ripetiri cumandamenti senza rinvià elli serà assai fora di locu.

Avemu da implementà cù i buttoni inline sottu i missaghji:

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

Riavvia u bot:

killall python3
screen -dmS ServerBot python3 bot.py

Cuntrollemu di novu chì tuttu funziona bè:

Accessu à u servitore Linux utilizendu Telegram bot in Python

Pressendu u buttone sottu à u missaghju, u bot deve ripetiri u cumandamentu da quale stu missaghju hè statu mandatu.

Inveci di 'na cunchiusioni

Di sicuru, stu metudu ùn pretende micca esse un rimpiazzamentu di i metudi di cunnessione classica, però, permette di sapè rapidamente nantu à u statu di u servitore è mandà cumandamenti à questu chì ùn necessitanu micca un output cumplessu.

Source: www.habr.com

Add a comment