Aksés ka server linux nganggo bot Telegram dina Python

Rada sering aya kaayaan nalika aksés ka server diperlukeun di dieu jeung ayeuna. Sanajan kitu, nyambungkeun ngaliwatan SSH teu salawasna cara nu pangmerenahna, sabab bisa jadi teu boga hiji klien SSH, alamat server, atawa kombinasi pamaké / sandi di leungeun. Tangtu boga wéb min, nu simplifies administrasi, tapi ogé teu nyadiakeun aksés instan.

Janten kuring mutuskeun pikeun nerapkeun solusi anu sederhana tapi pikaresepeun. Nyaéta, pikeun nyerat bot Telegram anu, nalika diluncurkeun dina server sorangan, bakal ngalaksanakeun paréntah anu dikirim ka dinya sareng ngabalikeun hasilna. Sanggeus diajar sababaraha artikel dina topik ieu, kuring sadar yén teu saurang ogé geus digambarkeun palaksanaan sapertos.

Kuring ngalaksanakeun proyék ieu dina Ubuntu 16.04, tapi pikeun ngajalankeun anu teu aya masalah dina distribusi anu sanés, kuring nyobian ngadamel sadayana sacara umum.

Pendaptaran bot

Ngadaptar bot anyar kalawan @BotFather. Urang kirimkeun manéhna /newbot sarta salajengna dina téks. Kami peryogi token bot énggal sareng id anjeun (anjeun tiasa kéngingkeun, contona, tina @userinfobot).

Persiapan Python

Pikeun ngajalankeun bot, urang bakal ngagunakeun perpustakaan telebot (pip install pytelegrambotapi). Ngagunakeun Perpustakaan subprocess urang bakal ngaéksekusi paréntah dina server.

peluncuran bot

Jieun file bot.py dina server:
nano bot.py

Sareng lebetkeun kodeu kana éta:

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

Kami ngagentos token bot di dinya sareng anu dikaluarkeun ku @BotFather, sareng user_id kalayan nilai id akun anjeun. Mariksa id pangguna diperyogikeun supados bot nyayogikeun aksés ka server anjeun ngan ukur anjeun. Fungsi check_output() executes paréntah dibikeun tur mulih hasilna.

Tetep ngan ukur ngamimitian bot. Pikeun ngajalankeun prosés dina server, abdi resep ngagunakeun screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(dimana "ServerBot" mangrupikeun ID prosés)

Prosésna bakal otomatis dijalankeun di latar tukang. Hayu urang angkat ka dialog sareng bot sareng pariksa yén sadayana jalan sakumaha sakuduna:

Aksés ka server linux nganggo bot Telegram dina Python

Wilujeng! Bot ngalaksanakeun paréntah anu dikirim ka éta. Ayeuna, pikeun ngaksés server, anjeun ngan ukur kedah muka dialog sareng bot.

Pangulangan paréntah

Seringna, pikeun ngawas kaayaan server, anjeun kedah ngalaksanakeun paréntah anu sami. Ku alatan éta, palaksanaan repeating paréntah tanpa resending aranjeunna bakal pisan kaluar tempat.

Kami bakal nerapkeun éta nganggo tombol inline dina pesen:

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

Balikan deui bot:

killall python3
screen -dmS ServerBot python3 bot.py

Hayu urang pariksa deui yén sagalana jalan leres:

Aksés ka server linux nganggo bot Telegram dina Python

Ku mencét tombol dina suratna, bot kedah ngulang paréntah ti mana pesen ieu dikirim.

Gantina kacindekan

Tangtosna, metoda ieu henteu nyamar janten gaganti pikeun metode sambungan klasik, tapi ngamungkinkeun anjeun gancang terang ngeunaan kaayaan server sareng ngirim paréntah ka éta anu henteu meryogikeun kaluaran rumit.

sumber: www.habr.com

Tambahkeun komentar