Access sa linux server gamit ang Telegram bot sa Python

Kadalasan mayroong mga sitwasyon kung kailan kailangan ang pag-access sa server dito at ngayon. Gayunpaman, ang pagkonekta sa pamamagitan ng SSH ay hindi palaging ang pinaka-maginhawang paraan, dahil maaaring wala kang isang SSH client, address ng server o kumbinasyon ng user/password sa kamay. Syempre meron Webmin, na pinapasimple ang pangangasiwa, ngunit hindi rin ito nagbibigay ng agarang pag-access.

Kaya nagpasya akong magpatupad ng simple ngunit kawili-wiling solusyon. Ibig sabihin, magsulat ng Telegram bot na, kapag inilunsad sa server mismo, ay isasagawa ang mga utos na ipinadala dito at ibabalik ang resulta. Nag-aral ilan Artikulo Sa paksang ito, napagtanto ko na wala pang naglalarawan ng mga naturang pagpapatupad.

Ipinatupad ko ang proyektong ito sa Ubuntu 16.04, ngunit para sa walang problema na paglulunsad sa iba pang mga distribusyon sinubukan kong gawin ang lahat sa pangkalahatang paraan.

Pagpaparehistro ng bot

Pagrerehistro ng bagong bot sa @BotFather. Ipinapadala namin ito sa kanya /newbot at higit pa sa teksto. Kakailanganin namin ng token para sa bagong bot at iyong id (makukuha mo ito, halimbawa, mula sa @userinfobot).

Paghahanda ng sawa

Para ilunsad ang bot gagamitin namin ang library telebot (pip install pytelegrambotapi). Gamit ang library subprocess Magpapatupad kami ng mga utos sa server.

Pagpapatakbo ng bot

Sa server ginagawa namin ang bot.py file:
nano bot.py

At i-paste ang code dito:

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

Pinapalitan namin ang bot token dito ng ibinigay ni @BotFather, at ang user_id ng id value ng iyong account. Ang pag-verify sa user ID ay kinakailangan upang ang bot ay magbigay ng access sa iyong server sa iyo lamang. Function check_output() isinasagawa ang ipinasa na utos at ibinabalik ang resulta.

Ang natitira na lang ay ilunsad ang bot. Upang magpatakbo ng mga proseso sa server mas gusto kong gamitin screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(kung saan ang "ServerBot" ay ang process ID)

Ang proseso ay awtomatikong magsisimula sa background. Pumunta tayo sa dialogue kasama ang bot at suriin kung gumagana ang lahat ayon sa nararapat:

Access sa linux server gamit ang Telegram bot sa Python

Binabati kita! Ang bot ay nagpapatupad ng mga utos na ipinadala dito. Ngayon, para ma-access ang server, kailangan mo lang magbukas ng dialogue kasama ang bot.

Paulit-ulit na mga utos

Kadalasan, upang masubaybayan ang estado ng server, kailangan mong patakbuhin ang parehong mga utos. Samakatuwid, ang pagpapatupad ng paulit-ulit na mga utos nang hindi ipinadala muli ang mga ito ay magiging angkop.

Ipapatupad namin ito gamit ang mga inline na button sa ilalim ng mga mensahe:

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

I-restart ang bot:

killall python3
screen -dmS ServerBot python3 bot.py

Suriin nating muli kung gumagana nang tama ang lahat:

Access sa linux server gamit ang Telegram bot sa Python

Kapag na-click mo ang button sa ilalim ng mensahe, dapat ulitin ng bot ang command kung saan ipinadala ang mensahe.

Sa halip ng isang konklusyon

Siyempre, ang pamamaraang ito ay hindi nagpapanggap na isang kapalit para sa mga klasikal na pamamaraan ng koneksyon, gayunpaman, pinapayagan ka nitong mabilis na malaman ang tungkol sa estado ng server at ipadala ito ng mga utos na hindi nangangailangan ng kumplikadong output.

Pinagmulan: www.habr.com

Magdagdag ng komento