אַקסעס צו לינוקס סערווער ניצן טעלעגראַם באָט אין פּיטהאָן

גאַנץ אָפט עס זענען סיטואַטיאָנס ווען אַקסעס צו די סערווער איז דארף דאָ און איצט. אָבער, קאַנעקטינג דורך SSH איז ניט שטענדיק די מערסט באַקוועם אופֿן, ווייַל איר קען נישט האָבן אַ SSH קליענט, סערווער אַדרעס אָדער באַניצער / פּאַראָל קאָמבינאַציע אין האַנט. פון קורס האָבן וועבמין, וואָס סימפּלאַפייז אַדמיניסטראַציע, אָבער עס אויך טוט נישט צושטעלן רעגע אַקסעס.

אַזוי איך באַשלאָסן צו ינסטרומענט אַ פּשוט אָבער טשיקאַווע לייזונג. נאַמעלי, שרייַבן אַ טעלעגראַם באָט אַז, ווען לאָנטשט אויף די סערווער זיך, וועט ויספירן קאַמאַנדז געשיקט צו אים און צוריקקומען די רעזולטאַט. ווייל געלערנט עטלעכע ארטיקלען אויף דעם טעמע, איך איינגעזען אַז קיין איינער האט נאָך דיסקרייבד אַזאַ ימפּלאַמאַנץ.

איך ימפּלאַמענאַד דעם פּרויעקט אויף Ubuntu 16.04, אָבער פֿאַר קאָנפליקט-פריי קאַטער אויף אנדערע דיסטריביושאַנז איך געפרוווט צו טאָן אַלץ אין אַ אַלגעמיין וועג.

Bot רעגיסטראַציע

רעדזשיסטערינג אַ נייַע באָט מיט @BotFather. מיר שיקן עס צו אים /newbot און ווייטער אין דעם טעקסט. מיר וועלן דאַרפֿן אַ סימען פֿאַר די נייַע באָט און דיין שייַן (איר קענען באַקומען עס, למשל, פֿון @userinfobot).

פּיטהאָן צוגרייטונג

צו קאַטער די באָט מיר וועלן נוצן די ביבליאָטעק telebot (pip install pytelegrambotapi). ניצן די ביבליאָטעק subprocess מיר וועלן ויספירן קאַמאַנדז אויף די סערווער.

פליסנדיק אַ באָט

אויף די סערווער מיר מאַכן די bot.py טעקע:
nano bot.py

און פּאַפּ די קאָד אין עס:

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

מיר פאַרבייַטן די באָט טאָקען אין עס מיט די ארויסגעגעבן דורך @BotFather, און די באַניצער_יד מיט די שייַן ווערט פון דיין חשבון. באַשטעטיקן די באַניצער שייַן איז נייטיק אַזוי אַז דער באָט גיט אַקסעס צו דיין סערווער בלויז צו איר. פֿונקציע check_output() עקסאַקיוץ די דורכגעגאנגען באַפֿעל און קערט די רעזולטאַט.

אַלע וואָס בלייבט איז צו קאַטער די באָט. צו לויפן פּראַסעסאַז אויף די סערווער איך בעסער צו נוצן screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(ווו "ServerBot" איז דער פּראָצעס שייַן)

דער פּראָצעס וועט אויטאָמאַטיש אָנהייבן אין דער הינטערגרונט. לאָמיר גיין אין דיאַלאָג מיט די באָט און קאָנטראָלירן אַז אַלץ אַרבעט ווי עס זאָל:

אַקסעס צו לינוקס סערווער ניצן טעלעגראַם באָט אין פּיטהאָן

מאַזל - טאָוו! דער באָט עקסאַקיוץ קאַמאַנדז געשיקט צו אים. איצט, צו אַקסעס די סערווער, איר נאָר דאַרפֿן צו עפֿענען אַ דיאַלאָג מיט די באָט.

ריפּיטינג קאַמאַנדז

אָפט, צו מאָניטאָר די שטאַט פון די סערווער, איר מוזן לויפן די זעלבע קאַמאַנדז. דעריבער, די ימפּלאַמענטיישאַן פון ריפּיטינג קאַמאַנדז אָן שיקן זיי ווידער וואָלט זיין זייער צונעמען.

מיר וועלן ינסטרומענט עס מיט ינלינע קנעפּלעך אונטער די אַרטיקלען:

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

ריסטאַרט די באָט:

killall python3
screen -dmS ServerBot python3 bot.py

לאָמיר ווידער קאָנטראָלירן אַז אַלץ אַרבעט ריכטיק:

אַקסעס צו לינוקס סערווער ניצן טעלעגראַם באָט אין פּיטהאָן

ווען איר גיט די קנעפּל אונטער די אָנזאָג, דער באָט מוזן איבערחזרן די באַפֿעל פון וואָס די אָנזאָג איז געשיקט.

אָנשטאָט אַ מסקנא

פון קורס, דעם אופֿן טוט נישט פאַרהיטן צו זיין אַ פאַרבייַט פֿאַר קלאַסיש קאַנעקשאַן מעטהאָדס, אָבער, עס אַלאַוז איר צו געשווינד געפֿינען זיך וועגן די שטאַט פון די סערווער און שיקן עס קאַמאַנדז וואָס טאָן ניט דאַרפן קאָמפּלעקס רעזולטאַט.

מקור: www.habr.com

לייגן אַ באַמערקונג