Mara nyingi kuna hali wakati ufikiaji wa seva unahitajika hapa na sasa. Walakini, kuunganisha kupitia SSH sio njia rahisi kila wakati, kwa sababu unaweza usiwe na mteja wa SSH, anwani ya seva, au mchanganyiko wa mtumiaji/nenosiri karibu. Bila shaka kuwa , ambayo hurahisisha utawala, lakini pia haitoi ufikiaji wa papo hapo.
Kwa hiyo niliamua kutekeleza suluhisho rahisi lakini la kuvutia. Yaani, kuandika bot ya Telegram ambayo, ikizinduliwa kwenye seva yenyewe, itatekeleza amri zilizotumwa kwake na kurudisha matokeo. Baada ya kusoma juu ya mada hii, niligundua kuwa hakuna mtu bado ameelezea utekelezaji kama huo.
Nilitekeleza mradi huu mnamo Ubuntu 16.04, lakini kwa uzinduzi usio na matatizo kwenye usambazaji mwingine, nilijaribu kufanya kila kitu kwa umbo la jumla.
Usajili wa kijibu
Sajili roboti mpya na @BotFather. Tunamtuma /newbot na zaidi katika maandishi. Tutahitaji tokeni mpya ya bot na kitambulisho chako (unaweza kuipata, kwa mfano, kutoka ).
Maandalizi ya chatu
Ili kuendesha bot, tutatumia maktaba telebot (pip install pytelegrambotapi) Kwa kutumia maktaba subprocess tutafanya amri kwenye seva.
Uzinduzi wa bot
Unda faili ya bot.py kwenye seva:
nano bot.py
Na ubandike msimbo ndani yake:
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)#в случае падения
Tunabadilisha tokeni ya roboti ndani yake na ile iliyotolewa na @BotFather, na user_id na thamani ya kitambulisho cha akaunti yako. Kuangalia kitambulisho cha mtumiaji inahitajika ili bot kutoa ufikiaji wa seva yako kwako tu. Kazi check_output() hutekeleza amri uliyopewa na kurudisha matokeo.
Inabakia tu kuanza bot. Kwa kuendesha michakato kwenye seva, napendelea kutumia screen (sudo apt-get install screen):
screen -dmS ServerBot python3 bot.py(ambapo "ServerBot" ndio kitambulisho cha mchakato)
Mchakato utaendesha kiotomatiki nyuma. Wacha tuende kwenye mazungumzo na roboti na angalia ikiwa kila kitu kinafanya kazi kama inavyopaswa:

Hongera! Kijibu hutekeleza amri zilizotumwa kwake. Sasa, ili kufikia seva, unahitaji tu kufungua mazungumzo na bot.
Amri kurudia
Mara nyingi, kufuatilia hali ya seva, unapaswa kutekeleza amri sawa. Kwa hiyo, utekelezaji wa kurudia amri bila kuwatuma tena utakuwa nje ya mahali.
Tutaitekeleza kwa kutumia vifungo vya ndani chini ya ujumbe:
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)#в случае падения
Kuanzisha upya bot:
killall python3
screen -dmS ServerBot python3 bot.py
Wacha tuangalie tena ikiwa kila kitu kinafanya kazi kwa usahihi:

Kwa kushinikiza kifungo chini ya ujumbe, bot lazima kurudia amri ambayo ujumbe huu ulitumwa.
Badala ya hitimisho
Kwa kweli, njia hii haijifanya kuwa mbadala wa njia za uunganisho wa kawaida, hata hivyo, hukuruhusu kujua haraka hali ya seva na kutuma amri kwake ambazo haziitaji pato ngumu.
Chanzo: mapenzi.com
