Çoğu zaman, burada ve şimdi sunucuya erişimin gerekli olduğu durumlar vardır. Ancak SSH ile bağlanmak her zaman en uygun yol değildir çünkü elinizde bir SSH istemcisi, sunucu adresi veya kullanıcı/parola kombinasyonu olmayabilir. tabii ki var
Bu yüzden basit ama ilginç bir çözüm uygulamaya karar verdim. Yani, sunucunun kendisinde başlatıldığında kendisine gönderilen komutları yürütecek ve sonucu döndürecek bir Telegram botu yazmak. okuduktan
Ben bu projeyi Ubuntu 16.04 üzerinde uygulamıştım fakat diğer dağıtımlarda sorunsuz çalışması için her şeyi genel bir şekilde yapmaya çalıştım.
bot kaydı
@BotFather ile yeni bir bot kaydedin. onu gönderiyoruz /newbot
ve ayrıca metinde. Yeni bir bot jetonuna ve kimliğinize ihtiyacımız olacak (bunu, örneğin,
Python hazırlığı
Botu çalıştırmak için kütüphaneyi kullanacağız telebot
(pip install pytelegrambotapi
). Kitaplığı Kullanma subprocess
sunucuda komutları çalıştıracağız.
Bot başlatma
Sunucuda bir bot.py dosyası oluşturun:
nano bot.py
Ve içine kodu yapıştırın:
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)#в случае падения
İçindeki bot jetonunu @BotFather tarafından verilenle ve user_id'yi hesabınızın id değeriyle değiştiriyoruz. Botun sunucunuza yalnızca size erişim sağlaması için kullanıcı kimliğinin kontrol edilmesi gereklidir. İşlev check_output()
verilen komutu yürütür ve sonucu döndürür.
Sadece botu başlatmak için kalır. Sunucuda çalışan işlemler için kullanmayı tercih ederim screen
(sudo apt-get install screen
):
screen -dmS ServerBot python3 bot.py
("ServerBot" işlem kimliğidir)
İşlem otomatik olarak arka planda çalışacaktır. Bot ile diyaloğa gidelim ve her şeyin olması gerektiği gibi çalışıp çalışmadığını kontrol edelim:
Tebrikler! Bot, kendisine gönderilen komutları yürütür. Şimdi, sunucuya erişmek için bot ile bir diyalog açmanız yeterli.
Komut tekrarı
Genellikle, sunucunun durumunu izlemek için aynı komutları uygulamanız gerekir. Bu nedenle, tekrarlanan komutları yeniden göndermeden uygulamak çok yersiz olacaktır.
Mesajların altındaki satır içi düğmeleri kullanarak uygulayacağız:
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)#в случае падения
Botu yeniden başlatma:
killall python3
screen -dmS ServerBot python3 bot.py
Her şeyin doğru çalışıp çalışmadığını tekrar kontrol edelim:
Bot, mesajın altındaki butona basarak bu mesajın gönderildiği komutu tekrar etmelidir.
Bunun yerine bir sonuca
Elbette bu yöntem, klasik bağlantı yöntemlerinin yerini alıyormuş gibi davranmaz, ancak sunucunun durumu hakkında hızlı bir şekilde bilgi edinmenize ve karmaşık çıktı gerektirmeyen komutlar göndermenize olanak tanır.
Kaynak: habr.com