Piuttostu spessu ci sò situazioni quandu l'accessu à u servitore hè necessariu quì è avà. Tuttavia, a cunnessione via SSH ùn hè micca sempre u modu più còmuda, perchè ùn pudete micca avè un cliente SSH, indirizzu di u servitore, o cumminazione utente / password à manu. Di sicuru avè
Allora decisu di implementà una suluzione simplice ma interessante. Vale à dì, per scrive un bot Telegram chì, quandu lanciatu nantu à u servitore stessu, eseguirà i cumandamenti mandati à ellu è rinvià u risultatu. Dopu avè studiatu
Aghju implementatu stu prughjettu nantu à Ubuntu 16.04, ma per una corsa senza prublemi in altre distribuzioni, aghju pruvatu à fà tuttu in modu generale.
Registrazione di u bot
Registrate un novu bot cù @BotFather. Li mandemu /newbot
è più in u testu. Avemu bisognu di un novu token di bot è u vostru id (pudete uttene, per esempiu, da
Preparazione di Python
Per eseguisce u bot, avemu aduprà a biblioteca telebot
(pip install pytelegrambotapi
). Utilizà a biblioteca subprocess
eseguiremu cumandamenti nantu à u servitore.
Lanciamentu di u bot
Crea un schedariu bot.py nantu à u servitore:
nano bot.py
È incollà u codice in questu:
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)#в случае падения
Sustituemu u token di bot in questu cù quellu emessu da @BotFather, è user_id cù u valore d'ID di u vostru contu. A verificazione di l'ID d'utilizatore hè necessariu per chì u bot furnisce accessu à u vostru servitore solu per voi. Funzione check_output()
esegue u cumandamentu datu è torna u risultatu.
Resta solu per inizià u bot. Per eseguisce prucessi nantu à u servitore, preferimu aduprà screen
(sudo apt-get install screen
):
screen -dmS ServerBot python3 bot.py
(induve "ServerBot" hè l'ID di prucessu)
U prucessu sarà in autumàticu in u sfondate. Andemu à u dialogu cù u bot è verificate chì tuttu funziona cum'è deve:
Felicitazioni! U bot eseguisce i cumandamenti mandati à ellu. Avà, per accede à u servitore, basta à apre un dialogu cù u bot.
Ripetizione di cumanda
Spessu, per monitorizà u statu di u servitore, avete da eseguisce i stessi cumandamenti. Dunque, l'implementazione di ripetiri cumandamenti senza rinvià elli serà assai fora di locu.
Avemu da implementà cù i buttoni inline sottu i missaghji:
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)#в случае падения
Riavvia u bot:
killall python3
screen -dmS ServerBot python3 bot.py
Cuntrollemu di novu chì tuttu funziona bè:
Pressendu u buttone sottu à u missaghju, u bot deve ripetiri u cumandamentu da quale stu missaghju hè statu mandatu.
Inveci di 'na cunchiusioni
Di sicuru, stu metudu ùn pretende micca esse un rimpiazzamentu di i metudi di cunnessione classica, però, permette di sapè rapidamente nantu à u statu di u servitore è mandà cumandamenti à questu chì ùn necessitanu micca un output cumplessu.
Source: www.habr.com