Oft koma upp aðstæður þar sem þörf er á aðgangi að þjóninum hér og nú. Hins vegar er tenging í gegnum SSH ekki alltaf þægilegasta leiðin, vegna þess að þú gætir ekki haft SSH biðlara, netþjónsfang eða notanda/lykilorð samsetningu við höndina. Hef auðvitað
Ég ákvað því að útfæra einfalda en áhugaverða lausn. Nefnilega að skrifa Telegram bot sem, þegar það er ræst á þjóninum sjálfum, mun framkvæma skipanirnar sem sendar eru til hans og skila niðurstöðunni. Að hafa lært
Ég innleiddi þetta verkefni á Ubuntu 16.04, en fyrir vandræðalausa keyrslu á öðrum dreifingum reyndi ég að gera allt á almennan hátt.
Bot skráning
Skráðu nýja láni með @BotFather. Við sendum hann /newbot
og lengra í textanum. Við þurfum nýjan botn-tákn og auðkennið þitt (þú getur fengið það td frá
Python undirbúningur
Til að keyra botninn munum við nota bókasafnið telebot
(pip install pytelegrambotapi
). Að nota bókasafnið subprocess
við munum framkvæma skipanir á þjóninum.
Láta sjósetja
Búðu til bot.py skrá á þjóninum:
nano bot.py
Og límdu kóðann inn í hann:
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)#в случае падения
Við skiptum út botnatákninu í honum fyrir þann sem @BotFather gaf út og user_id fyrir auðkennisgildi reikningsins þíns. Nauðsynlegt er að athuga notendaauðkennið svo að botni veiti þér aðeins aðgang að þjóninum þínum. Virka check_output()
framkvæmir tiltekna skipun og skilar niðurstöðunni.
Það er aðeins eftir að ræsa vélmennið. Til að keyra ferla á þjóninum vil ég frekar nota screen
(sudo apt-get install screen
):
screen -dmS ServerBot python3 bot.py
(þar sem "ServerBot" er auðkenni ferlisins)
Ferlið mun sjálfkrafa keyra í bakgrunni. Við skulum fara í samtalið við botmanninn og athuga hvort allt virki eins og það á að gera:
Til hamingju! Botninn framkvæmir skipanirnar sem sendar eru til hans. Nú, til þess að fá aðgang að þjóninum, þarftu bara að opna samtal við botmanninn.
Skipun um endurtekningu
Oft, til að fylgjast með stöðu þjónsins, þarftu að framkvæma sömu skipanir. Þess vegna mun útfærsla á því að endurtaka skipanir án þess að senda þær aftur vera mjög út í hött.
Við munum útfæra það með því að nota innbyggða hnappa undir skilaboðunum:
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)#в случае падения
Endurræsir vélina:
killall python3
screen -dmS ServerBot python3 bot.py
Athugum aftur að allt virki rétt:
Með því að ýta á hnappinn undir skilaboðunum verður botni að endurtaka skipunina sem þessi skilaboð voru send frá.
Í stað þess að niðurstöðu
Auðvitað þykist þessi aðferð ekki koma í staðinn fyrir klassískar tengiaðferðir, en hún gerir þér kleift að komast fljótt að stöðu þjónsins og senda skipanir til hans sem krefjast ekki flókins úttaks.
Heimild: www.habr.com