Python дээр Telegram бот ашиглан линукс серверт нэвтрэх

Ихэнхдээ серверт нэвтрэх шаардлагатай нөхцөл байдал энд, одоо байдаг. Гэсэн хэдий ч SSH-ээр холбогдох нь үргэлж хамгийн тохиромжтой арга байдаггүй, учир нь танд SSH клиент, серверийн хаяг, хэрэглэгчийн/нууц үгийн хослол байхгүй байж магадгүй юм. Мэдээж байгаа Webmin, энэ нь удирдлагыг хялбаршуулдаг, гэхдээ энэ нь шууд нэвтрэх боломжийг олгодоггүй.

Тиймээс би энгийн боловч сонирхолтой шийдлийг хэрэгжүүлэхээр шийдсэн. Тухайлбал, Telegram бот бичихийн тулд сервер дээр өөрөө ажиллуулсны дараа түүнд илгээсэн командуудыг гүйцэтгэж үр дүнг нь буцаана. Сурсан хэд хэдэн нийтлэл Энэ сэдвээр ийм хэрэгжилтийг хэн ч хараахан тайлбарлаагүй байгааг би ойлгосон.

Би энэ төслийг Ubuntu 16.04 дээр хэрэгжүүлсэн боловч бусад түгээлтүүд дээр асуудалгүй ажиллахын тулд бүх зүйлийг ерөнхий байдлаар хийхийг хичээсэн.

Ботын бүртгэл

@BotFather-д шинэ робот бүртгүүлээрэй. Бид түүнийг илгээдэг /newbot ба цааш нь текстэнд. Бидэнд шинэ ботын токен болон таны ID хэрэгтэй болно (та үүнийг жишээ нь @userinfobot).

Python бэлтгэл

Ботыг ажиллуулахын тулд бид номын санг ашиглах болно 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 юм)

Процесс автоматаар арын дэвсгэр дээр ажиллах болно. Боттой ярилцаж, бүх зүйл зохих ёсоор ажиллаж байгаа эсэхийг шалгацгаая.

Python дээр Telegram бот ашиглан линукс серверт нэвтрэх

Баяр хүргэе! Бот нь түүнд илгээсэн командуудыг гүйцэтгэдэг. Одоо серверт нэвтрэхийн тулд боттой харилцах цонхыг нээхэд л хангалттай.

Тушаалын давталт

Ихэнхдээ серверийн төлөвийг хянахын тулд ижил тушаалуудыг гүйцэтгэх шаардлагатай болдог. Тиймээс дахин илгээхгүйгээр давтан тушаалуудыг хэрэгжүүлэх нь маш зохисгүй байх болно.

Бид үүнийг мессежийн доорх шугаман товчлууруудыг ашиглан хэрэгжүүлэх болно:

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

Бүх зүйл зөв ажиллаж байгаа эсэхийг дахин шалгая:

Python дээр Telegram бот ашиглан линукс серверт нэвтрэх

Мессежийн доорх товчлуурыг дарснаар бот энэ мессежийг илгээсэн тушаалыг давтах ёстой.

Оронд дүгнэлтийг

Мэдээжийн хэрэг, энэ арга нь сонгодог холболтын аргуудыг орлох мэт дүр эсгэдэггүй, гэхдээ энэ нь серверийн төлөв байдлын талаар хурдан олж мэдэх, нарийн төвөгтэй гаралт шаарддаггүй командуудыг илгээх боломжийг олгодог.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх