Aðgangur að Linux netþjóni með því að nota Telegram bot í Python

Oft koma upp aðstæður þar sem þörf er á aðgangi að þjóninum hér og nú. Hins vegar er tenging í gegnum SSH ekki alltaf þægilegasta leiðin, vegna þess að þú gætir ekki haft SSH biðlara, netþjónsfang eða notanda/lykilorð samsetningu við höndina. Hef auðvitað Webmin, sem einfaldar stjórnun, en það veitir heldur ekki tafarlausan aðgang.

Ég ákvað því að útfæra einfalda en áhugaverða lausn. Nefnilega að skrifa Telegram bot sem, þegar það er ræst á þjóninum sjálfum, mun framkvæma skipanirnar sem sendar eru til hans og skila niðurstöðunni. Að hafa lært sumar greinar um þetta efni áttaði ég mig á því að enginn hefur enn lýst slíkum útfærslum.

Ég innleiddi þetta verkefni á Ubuntu 16.04, en fyrir vandræðalausa keyrslu á öðrum dreifingum reyndi ég að gera allt á almennan hátt.

Bot skráning

Skráðu nýja láni með @BotFather. Við sendum hann /newbot og lengra í textanum. Við þurfum nýjan botn-tákn og auðkennið þitt (þú getur fengið það td frá @userinfobot).

Python undirbúningur

Til að keyra botninn munum við nota bókasafnið telebot (pip install pytelegrambotapi). Að nota bókasafnið subprocess við munum framkvæma skipanir á þjóninum.

Láta sjósetja

Búðu til bot.py skrá á þjóninum:
nano bot.py

Og límdu kóðann inn í hann:

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

Við skiptum út botnatákninu í honum fyrir þann sem @BotFather gaf út og user_id fyrir auðkennisgildi reikningsins þíns. Nauðsynlegt er að athuga notendaauðkennið svo að botni veiti þér aðeins aðgang að þjóninum þínum. Virka check_output() framkvæmir tiltekna skipun og skilar niðurstöðunni.

Það er aðeins eftir að ræsa vélmennið. Til að keyra ferla á þjóninum vil ég frekar nota screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(þar sem "ServerBot" er auðkenni ferlisins)

Ferlið mun sjálfkrafa keyra í bakgrunni. Við skulum fara í samtalið við botmanninn og athuga hvort allt virki eins og það á að gera:

Aðgangur að Linux netþjóni með því að nota Telegram bot í Python

Til hamingju! Botninn framkvæmir skipanirnar sem sendar eru til hans. Nú, til þess að fá aðgang að þjóninum, þarftu bara að opna samtal við botmanninn.

Skipun um endurtekningu

Oft, til að fylgjast með stöðu þjónsins, þarftu að framkvæma sömu skipanir. Þess vegna mun útfærsla á því að endurtaka skipanir án þess að senda þær aftur vera mjög út í hött.

Við munum útfæra það með því að nota innbyggða hnappa undir skilaboðunum:

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

Endurræsir vélina:

killall python3
screen -dmS ServerBot python3 bot.py

Athugum aftur að allt virki rétt:

Aðgangur að Linux netþjóni með því að nota Telegram bot í Python

Með því að ýta á hnappinn undir skilaboðunum verður botni að endurtaka skipunina sem þessi skilaboð voru send frá.

Í stað þess að niðurstöðu

Auðvitað þykist þessi aðferð ekki koma í staðinn fyrir klassískar tengiaðferðir, en hún gerir þér kleift að komast fljótt að stöðu þjónsins og senda skipanir til hans sem krefjast ekki flókins úttaks.

Heimild: www.habr.com

Bæta við athugasemd