Shumë shpesh ka situata kur qasja në server është e nevojshme këtu dhe tani. Megjithatë, lidhja nëpërmjet SSH nuk është gjithmonë mënyra më e përshtatshme, sepse mund të mos keni në dorë një klient SSH, adresë serveri ose kombinim përdorues/fjalëkalim. Sigurisht që kanë
Kështu që vendosa të zbatoj një zgjidhje të thjeshtë por interesante. Domethënë, për të shkruar një bot Telegram që, kur të lansohet në vetë server, do të ekzekutojë komandat që i dërgohen dhe do të kthejë rezultatin. Duke studiuar
Unë e zbatova këtë projekt në Ubuntu 16.04, por për një ekzekutim pa probleme në shpërndarjet e tjera, u përpoqa të bëja gjithçka në një mënyrë të përgjithshme.
Regjistrimi në bot
Regjistro një bot të ri me @BotFather. Ne e dërgojmë atë /newbot
dhe më tej në tekst. Do të na duhet një shenjë e re bot dhe ID-ja juaj (mund ta merrni, për shembull, nga
Përgatitja e Python
Për të ekzekutuar robotin, ne do të përdorim bibliotekën telebot
(pip install pytelegrambotapi
). Duke përdorur bibliotekën subprocess
ne do të ekzekutojmë komanda në server.
Nisja e botit
Krijoni një skedar bot.py në server:
nano bot.py
Dhe ngjisni kodin në të:
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)#в случае падения
Ne zëvendësojmë tokenin e botit në të me atë të lëshuar nga @BotFather dhe user_id me vlerën id të llogarisë tuaj. Kontrollimi i ID-së së përdoruesit është i nevojshëm në mënyrë që roboti t'ju ofrojë akses në serverin tuaj vetëm për ju. Funksioni check_output()
ekzekuton komandën e dhënë dhe kthen rezultatin.
Mbetet vetëm për të nisur bot. Për ekzekutimin e proceseve në server, unë preferoj të përdor screen
(sudo apt-get install screen
):
screen -dmS ServerBot python3 bot.py
(ku "ServerBot" është ID e procesit)
Procesi do të funksionojë automatikisht në sfond. Le të shkojmë në dialog me robotin dhe të kontrollojmë që gjithçka funksionon siç duhet:
urime! Bot ekzekuton komandat e dërguara në të. Tani, për të hyrë në server, thjesht duhet të hapni një dialog me robotin.
Përsëritja e komandës
Shpesh, për të monitoruar gjendjen e serverit, duhet të ekzekutoni të njëjtat komanda. Prandaj, zbatimi i komandave të përsëritura pa i ridërguar ato do të jetë shumë i pavend.
Ne do ta zbatojmë atë duke përdorur butonat inline nën mesazhet:
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)#в случае падения
Rinisja e robotit:
killall python3
screen -dmS ServerBot python3 bot.py
Le të kontrollojmë përsëri nëse gjithçka funksionon siç duhet:
Duke shtypur butonin nën mesazh, boti duhet të përsërisë komandën nga e cila është dërguar ky mesazh.
Në vend të një përfundimi
Sigurisht, kjo metodë nuk pretendon të jetë një zëvendësim për metodat klasike të lidhjes, megjithatë, ju lejon të mësoni shpejt gjendjen e serverit dhe të dërgoni komanda në të që nuk kërkojnë dalje komplekse.
Burimi: www.habr.com