Upataji wa seva ya linux kwa kutumia Telegraph bot huko Python

Mara nyingi kuna hali wakati ufikiaji wa seva unahitajika hapa na sasa. Walakini, kuunganisha kupitia SSH sio njia rahisi kila wakati, kwa sababu unaweza usiwe na mteja wa SSH, anwani ya seva, au mchanganyiko wa mtumiaji/nenosiri karibu. Bila shaka kuwa Webmin, ambayo hurahisisha utawala, lakini pia haitoi ufikiaji wa papo hapo.

Kwa hiyo niliamua kutekeleza suluhisho rahisi lakini la kuvutia. Yaani, kuandika bot ya Telegram ambayo, ikizinduliwa kwenye seva yenyewe, itatekeleza amri zilizotumwa kwake na kurudisha matokeo. Baada ya kusoma baadhi makala juu ya mada hii, niligundua kuwa hakuna mtu bado ameelezea utekelezaji kama huo.

Nilitekeleza mradi huu kwenye Ubuntu 16.04, lakini kwa kukimbia bila shida kwenye usambazaji mwingine, nilijaribu kufanya kila kitu kwa njia ya jumla.

Usajili wa kijibu

Sajili roboti mpya na @BotFather. Tunamtuma /newbot na zaidi katika maandishi. Tutahitaji tokeni mpya ya bot na kitambulisho chako (unaweza kuipata, kwa mfano, kutoka @userinfobot).

Maandalizi ya chatu

Ili kuendesha bot, tutatumia maktaba telebot (pip install pytelegrambotapi) Kwa kutumia maktaba subprocess tutafanya amri kwenye seva.

Uzinduzi wa bot

Unda faili ya bot.py kwenye seva:
nano bot.py

Na ubandike msimbo ndani yake:

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

Tunabadilisha tokeni ya roboti ndani yake na ile iliyotolewa na @BotFather, na user_id na thamani ya kitambulisho cha akaunti yako. Kuangalia kitambulisho cha mtumiaji inahitajika ili bot kutoa ufikiaji wa seva yako kwako tu. Kazi check_output() hutekeleza amri uliyopewa na kurudisha matokeo.

Inabakia tu kuanza bot. Kwa kuendesha michakato kwenye seva, napendelea kutumia screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(ambapo "ServerBot" ndio kitambulisho cha mchakato)

Mchakato utaendesha kiotomatiki nyuma. Wacha tuende kwenye mazungumzo na roboti na angalia ikiwa kila kitu kinafanya kazi kama inavyopaswa:

Upataji wa seva ya linux kwa kutumia Telegraph bot huko Python

Hongera! Kijibu hutekeleza amri zilizotumwa kwake. Sasa, ili kufikia seva, unahitaji tu kufungua mazungumzo na bot.

Amri kurudia

Mara nyingi, kufuatilia hali ya seva, unapaswa kutekeleza amri sawa. Kwa hiyo, utekelezaji wa kurudia amri bila kuwatuma tena utakuwa nje ya mahali.

Tutaitekeleza kwa kutumia vifungo vya ndani chini ya ujumbe:

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

Kuanzisha upya bot:

killall python3
screen -dmS ServerBot python3 bot.py

Wacha tuangalie tena ikiwa kila kitu kinafanya kazi kwa usahihi:

Upataji wa seva ya linux kwa kutumia Telegraph bot huko Python

Kwa kushinikiza kifungo chini ya ujumbe, bot lazima kurudia amri ambayo ujumbe huu ulitumwa.

Badala ya hitimisho

Kwa kweli, njia hii haijifanya kuwa mbadala wa njia za uunganisho wa kawaida, hata hivyo, hukuruhusu kujua haraka hali ya seva na kutuma amri kwake ambazo haziitaji pato ngumu.

Chanzo: mapenzi.com

Kuongeza maoni