Akses ke server linux menggunakan bot Python Telegram

Cukup sering ada situasi ketika akses ke server diperlukan di sini dan sekarang. Namun, koneksi SSH tidak selalu merupakan cara yang paling nyaman, karena klien SSH, alamat server, atau tautan pengguna / kata sandi mungkin tidak tersedia. Tentu saja, ada Webmin , yang menyederhanakan administrasi, tetapi juga tidak memberikan akses instan.

Jadi saya memutuskan untuk mengimplementasikan solusi yang sederhana namun menarik. Yaitu, untuk menulis bot Telegram, yang, dimulai pada server itu sendiri, akan menjalankan perintah yang dikirim kepadanya dan mengembalikan hasilnya. Setelah mempelajari beberapa artikel tentang topik ini, saya menyadari bahwa belum ada yang menggambarkan implementasi seperti itu.

Saya mengimplementasikan proyek ini di Ubuntu 16.04, tetapi untuk peluncuran tanpa masalah di distribusi lain, saya mencoba melakukan semuanya secara umum.

Pendaftaran Bot


Daftarkan bot baru dengan @BotFather. Kami mengirimnya /newbot dan selanjutnya dalam teks. Kami akan memerlukan token bot baru dan id Anda (Anda bisa mendapatkannya, misalnya, dari @userinfobot ).

Persiapan python


Untuk memulai bot, kita akan menggunakan perpustakaan telebot ( pip install pytelegrambotapi ). Menggunakan pustaka subprocess , kami akan menjalankan perintah di server.

Peluncuran bot


Di server, buat file bot.py:
nano bot.py

Dan rekatkan kode ke dalamnya:

 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)#   

Kami mengganti token bot di dalamnya dengan yang dikeluarkan oleh @BotFather, dan user_id dengan nilai id dari akun Anda. Memeriksa id pengguna diperlukan agar bot menyediakan akses ke server Anda hanya untuk Anda. Fungsi check_output() mengeksekusi perintah yang dikirimkan dan mengembalikan hasilnya.

Tetap hanya meluncurkan bot. Untuk memulai proses di server, saya lebih suka menggunakan screen ( sudo apt-get install screen ):

 screen -dmS ServerBot python3 bot.py 
(di mana "ServerBot" adalah pengidentifikasi proses)

Proses akan secara otomatis dimulai di latar belakang. Mari kita masuk ke dialog dengan bot dan memeriksa apakah semuanya berfungsi sebagaimana mestinya:



Selamat! Bot mengeksekusi perintah yang dikirim kepadanya. Sekarang, untuk mendapatkan akses ke server, Anda hanya perlu membuka dialog dengan bot.

Pengulangan perintah


Seringkali, untuk memantau status server Anda harus menjalankan perintah yang sama. Oleh karena itu, pelaksanaan pengulangan perintah tanpa mengirimnya lagi akan sangat tidak pada tempatnya.

Kami akan menerapkan menggunakan tombol sebaris di bawah pesan:

 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)#   

Mulai ulang bot:

 killall python3 screen -dmS ServerBot python3 bot.py 

Periksa lagi apakah semuanya berfungsi dengan benar:



Dengan menekan tombol di bawah pesan, bot harus mengulangi perintah dari mana pesan dikirim.

Alih-alih sebuah kesimpulan


Tentu saja, metode ini tidak berpura-pura menjadi pengganti metode koneksi klasik, namun, Anda dapat dengan cepat mencari tahu tentang status server dan mengirimkan perintah kepadanya yang tidak memerlukan output yang rumit.

Source: https://habr.com/ru/post/id443846/


All Articles