Rochtain ar fhreastalaí linux ag baint úsáide as Telegram bot i Python

Go minic bíonn cásanna ann nuair a bhíonn gá le rochtain ar an bhfreastalaí anseo agus anois. Mar sin féin, ní i gcónaí é nascadh trí SSH ar an modh is áisiúla, mar b'fhéidir nach mbeadh cliant SSH, seoladh freastalaí nó teaglaim úsáideora/pasfhocail agat. Ar ndóigh tá Webmin, rud a shimplíonn riarachán, ach ní sholáthraíonn sé rochtain láithreach freisin.

Mar sin chinn mé réiteach simplí ach suimiúil a chur i bhfeidhm. Is é sin, scríobh bot Telegram a dhéanfaidh, nuair a sheoltar é ar an bhfreastalaí féin, orduithe a sheoltar chuige agus an toradh a sheoladh ar ais. Tar éis staidéar a dhéanamh roinnt earraí ar an ábhar seo, thuig mé nach bhfuil aon duine cur síos fós implementations den sórt sin.

Chuir mé an tionscadal seo i bhfeidhm ar Ubuntu 16.04, ach le haghaidh seoladh saor ó thrioblóid ar dháiltí eile rinne mé iarracht gach rud a dhéanamh ar bhealach ginearálta.

Clárú bot

Bot nua á chlárú le @BotFather. Cuirimid chuige é /newbot agus níos faide sa téacs. Beidh comhartha ag teastáil uainn don bhota nua agus d'aitheantas (is féidir leat é a fháil, mar shampla, ó @userinfobot).

Ullmhúchán Python

Chun an bot a sheoladh úsáidfimid an leabharlann telebot (pip install pytelegrambotapi). Ag baint úsáide as an leabharlann subprocess Déanfaimid orduithe a fhorghníomhú ar an bhfreastalaí.

Rith bot

Cruthaigh comhad bot.py ar an bhfreastalaí:
nano bot.py

Agus greamaigh an cód isteach ann:

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

Déanaimid ionad an chomhartha bot atá ann leis an gceann a d'eisigh @BotFather, agus an t-úsáideoir_id le luach aitheantais do chuntais. Is gá an t-aitheantas úsáideora a fhíorú ionas go dtabharfaidh an bot rochtain ar do fhreastalaí duit amháin. Feidhm check_output() cuireann sé an t-ordú a thugtar i gcrích agus cuireann sé an toradh ar ais.

Níl ann ach an bot a thosú. Le haghaidh próisis a reáchtáil ar an bhfreastalaí, is fearr liom a úsáid screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(áit arb é "ServerBot" aitheantas an phróisis)

Beidh an próiseas ar siúl go huathoibríoch sa chúlra. Rachaimid chuig an agallamh leis an bot agus seiceáil go n-oibríonn gach rud mar ba chóir:

Rochtain ar fhreastalaí linux ag baint úsáide as Telegram bot i Python

Comhghairdeachas! Feidhmíonn an bot orduithe a seoladh chuige. Anois, chun rochtain a fháil ar an bhfreastalaí, ní gá duit ach agallamh a oscailt leis an bot.

Orduithe a athrá

Go minic, chun monatóireacht a dhéanamh ar staid an fhreastalaí, caithfidh tú na horduithe céanna a rith. Dá bhrí sin, bheadh ​​sé an-oiriúnach orduithe a athdhéanamh gan iad a sheoladh arís.

Cuirfimid i bhfeidhm é trí úsáid a bhaint as cnaipí inlíne faoi na teachtaireachtaí:

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

Atosaigh an bot:

killall python3
screen -dmS ServerBot python3 bot.py

Déanaimis seiceáil arís go n-oibríonn gach rud i gceart:

Rochtain ar fhreastalaí linux ag baint úsáide as Telegram bot i Python

Nuair a chliceálann tú an cnaipe faoin teachtaireacht, caithfidh an bot an t-ordú óna seoladh an teachtaireacht a athdhéanamh.

In ionad a thabhairt i gcrích

Ar ndóigh, níl an modh seo ag ligean air go bhfuil sé in ionad modhanna nasc clasaiceach, áfach, ligeann sé duit eolas a fháil go tapa ar staid an fhreastalaí agus orduithe a sheoladh chuige nach dteastaíonn aschur casta uathu.

Foinse: will.com

Add a comment