Ganz dacks ginn et Situatiounen, wou den Zougang zum Server hei an elo gebraucht gëtt. Wéi och ëmmer, d'Verbindung iwwer SSH ass net ëmmer déi bequemste Method, well Dir vläicht keen SSH Client, Serveradress oder Benotzer / Passwuert Kombinatioun bei der Hand hutt. Natierlech hunn
Also hunn ech beschloss eng einfach awer interessant Léisung ëmzesetzen. Schreift nämlech en Telegram Bot, deen, wann se um Server selwer lancéiert gëtt, d'Befehle ausféiert, déi dohinner geschéckt ginn an d'Resultat zréckginn. Studéiert hunn
Ech hunn dëse Projet op Ubuntu 16.04 implementéiert, awer fir problemfräi Start op aner Verdeelungen hunn ech probéiert alles op eng allgemeng Manéier ze maachen.
Bot Aschreiwung
En neie Bot mat @BotFather registréieren. Mir schécken et him /newbot
a weider am Text. Mir brauchen en Token fir den neie Bot an Är ID (Dir kënnt et zum Beispill vun
Python Virbereedung
Fir de Bot ze starten benotze mir d'Bibliothéik telebot
(pip install pytelegrambotapi
). Benotzen d'Bibliothéik subprocess
Mir wäerte Kommandoen um Server ausféieren.
Lafen engem Bot
Um Server kreéiere mir d'bot.py Datei:
nano bot.py
A paste de Code an et:
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)#в случае падения
Mir ersetzen de Bot Token dran duerch dee vum @BotFather erausginn, an de User_id mam ID Wäert vun Ärem Kont. D'Benotzer ID z'iwwerpréiwen ass néideg sou datt de Bot Zougang zu Ärem Server nëmmen Iech gëtt. Funktioun check_output()
fiert de passéierte Kommando aus a gëtt d'Resultat zréck.
Alles wat bleift ass de Bot ze starten. Fir Prozesser um Server ze lafen, déi ech léiwer benotzen screen
(sudo apt-get install screen
):
screen -dmS ServerBot python3 bot.py
(wou "ServerBot" de Prozess ID ass)
De Prozess fänkt automatesch am Hannergrond un. Loosst eis mam Bot an den Dialog goen a kucken ob alles funktionnéiert wéi et soll:
Gratulatioun! De Bot exekutéiert Kommandoen, déi him geschéckt ginn. Elo, fir op de Server ze kommen, musst Dir just en Dialog mam Bot opmaachen.
Widderhuelen Kommandoen
Oft, fir den Zoustand vum Server ze iwwerwaachen, musst Dir déiselwecht Kommandoen ausféieren. Dofir wier d'Ëmsetze vu Widderhuelungsbefehl ouni se erëm ze schécken ganz gëeegent.
Mir implementéieren et mat Inline Knäppercher ënner de Messagen:
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)#в случае падения
Restart de Bot:
killall python3
screen -dmS ServerBot python3 bot.py
Loosst eis nach eng Kéier kucken ob alles richteg funktionnéiert:
Wann Dir op de Knäppchen ënnert der Noriicht klickt, muss de Bot de Kommando widderhuelen, aus deem de Message geschéckt gouf.
Amplaz vun enger Konklusioun
Natierlech mécht dës Method net als Ersatz fir klassesch Verbindungsmethoden, awer et erlaabt Iech séier iwwer den Zoustand vum Server erauszefannen an et Kommandoen ze schécken déi keng komplex Ausgab erfuerderen.
Source: will.com