Pag-access sa linux server gamit ang Telegram bot sa Python

Kasagaran adunay mga sitwasyon kung gikinahanglan ang pag-access sa server dinhi ug karon. Bisan pa, ang pagkonektar pinaagi sa SSH dili kanunay ang labing kombenyente nga paagi, tungod kay mahimo nga wala ka usa ka kliyente sa SSH, adres sa server, o kombinasyon sa user/password. Siyempre adunay Webmin, nga nagpayano sa administrasyon, apan wala usab kini maghatag dayon nga pag-access.

Mao nga nakahukom ko nga ipatuman ang usa ka yano apan makapaikag nga solusyon. Nga mao, sa pagsulat sa usa ka Telegram bot nga, kung gilansad sa server mismo, ipatuman ang mga mando nga gipadala niini ug ibalik ang resulta. Nakatuon daghan mga artikulo sa kini nga hilisgutan, akong naamgohan nga wala pa'y usa nga naghulagway sa ingon nga mga pagpatuman.

Gipatuman nako kini nga proyekto sa Ubuntu 16.04, apan alang sa usa ka walay problema nga pagdagan sa ubang mga distribusyon, gisulayan nako nga himoon ang tanan sa kinatibuk-ang paagi.

Pagparehistro sa bot

Pagrehistro og bag-ong bot gamit ang @BotFather. Gipadala namo siya /newbot ug dugang pa sa teksto. Magkinahanglan kami og bag-ong bot token ug imong id (makuha nimo kini, pananglitan, gikan sa @userinfobot).

Pagpangandam sa Python

Sa pagpadagan sa bot, atong gamiton ang librarya telebot (pip install pytelegrambotapi). Paggamit sa librarya subprocess atong ipatuman ang mga sugo sa server.

Paglansad sa bot

Paghimo og bot.py file sa server:
nano bot.py

Ug i-paste ang code niini:

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

Among ilisan ang bot token niini sa usa nga gi-isyu ni @BotFather, ug user_id sa id value sa imong account. Ang pagsusi sa user id gikinahanglan aron ang bot makahatag og access sa imong server kanimo lamang. Kalihokan check_output() ipatuman ang gihatag nga sugo ug ibalik ang resulta.

Kini nagpabilin lamang sa pagsugod sa bot. Alang sa pagpadagan sa mga proseso sa server, mas gusto nako nga gamiton screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(diin ang "ServerBot" mao ang proseso ID)

Ang proseso awtomatikong modagan sa background. Adto kita sa diyalogo sa bot ug susiha nga ang tanan molihok sama sa kinahanglan:

Pag-access sa linux server gamit ang Telegram bot sa Python

Mga pahalipay! Ang bot nagpatuman sa mga sugo nga gipadala niini. Karon, aron ma-access ang server, kinahanglan nimo nga magbukas sa usa ka diyalogo sa bot.

Pag-usab sa sugo

Kasagaran, aron ma-monitor ang kahimtang sa server, kinahanglan nimo nga ipatuman ang parehas nga mga mando. Busa, ang pagpatuman sa balik-balik nga mga sugo nga wala ipadala pag-usab dili na sa lugar.

Ipatuman namo kini gamit ang mga inline nga buton ubos sa 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

Atong susihon pag-usab nga ang tanan nagtrabaho sa husto:

Pag-access sa linux server gamit ang Telegram bot sa Python

Pinaagi sa pagpindot sa buton sa ilawom sa mensahe, ang bot kinahanglang sublion ang sugo diin gipadala kini nga mensahe.

Kay sa usa ka konklusyon

Siyempre, kini nga pamaagi wala magpakaaron-ingnon nga usa ka kapuli sa klasiko nga mga pamaagi sa koneksyon, bisan pa, kini nagtugot kanimo nga dali nga mahibal-an ang bahin sa kahimtang sa server ug ipadala ang mga mando niini nga wala magkinahanglan komplikado nga output.

Source: www.habr.com

Idugang sa usa ka comment