Akses menyang server linux nggunakake bot Telegram ing Python

Cukup asring ana kahanan nalika akses menyang server dibutuhake ing kene lan saiki. Nanging, nyambungake liwat SSH ora mesthi cara sing paling trep, amarga sampeyan ora duwe klien SSH, alamat server, utawa kombinasi pangguna/sandi. Mesthi wis Webmin, sing nyederhanakake administrasi, nanging uga ora nyedhiyakake akses cepet.

Dadi aku mutusake kanggo ngetrapake solusi sing prasaja nanging menarik. Yaiku, kanggo nulis bot Telegram sing, nalika diluncurake ing server dhewe, bakal nglakokake perintah sing dikirim menyang lan ngasilake asil. Wis sinau sawetara artikel ing topik iki, Aku temen maujud sing durung ana siji wis diterangake implementasine kuwi.

Aku ngleksanakake proyek iki ing Ubuntu 16.04, nanging kanggo mbukak tanpa masalah ing distribusi liyane, aku nyoba nggawe kabeh kanthi cara umum.

Registrasi bot

Ndhaptar bot anyar karo @BotFather. We ngirim wong /newbot lan luwih ing teks. Kita butuh token bot anyar lan id sampeyan (sampeyan bisa entuk, contone, saka @userinfobot).

Persiapan Python

Kanggo mbukak bot, kita bakal nggunakake perpustakaan telebot (pip install pytelegrambotapi). Nggunakake Pustaka subprocess kita bakal nglakokakΓ© printah ing server.

Bukak bot

Nggawe file bot.py ing server:
nano bot.py

Lan paste kode kasebut ing:

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)#Π² случаС падСния

Kita ngganti token bot kasebut karo sing ditanggepi dening @BotFather, lan user_id karo nilai id akun sampeyan. Priksa id pangguna dibutuhake supaya bot menehi akses menyang server sampeyan mung kanggo sampeyan. Fungsi check_output() nglakokake perintah sing diwenehake lan ngasilake asil.

Iku tetep mung kanggo miwiti bot. Kanggo mlaku pangolahan ing server, Aku luwih seneng nggunakake screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(ing ngendi "ServerBot" minangka ID proses)

Proses bakal mlaku kanthi otomatis ing latar mburi. Ayo menyang dialog karo bot lan priksa manawa kabeh bisa ditindakake:

Akses menyang server linux nggunakake bot Telegram ing Python

Sugeng rawuh! Bot nglakokakΓ© prentah sing dikirim menyang. Saiki, kanggo ngakses server, sampeyan mung kudu mbukak dialog karo bot.

Ambalan printah

Asring, kanggo ngawasi kahanan server, sampeyan kudu nglakokake perintah sing padha. Mulane, implementasine mbaleni printah tanpa ngirim maneh bakal banget metu saka panggonan.

Kita bakal ngetrapake kanthi nggunakake tombol inline ing pesen:

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)#Π² случаС падСния

Miwiti maneh bot:

killall python3
screen -dmS ServerBot python3 bot.py

Ayo dipriksa maneh yen kabeh bisa digunakake kanthi bener:

Akses menyang server linux nggunakake bot Telegram ing Python

Kanthi menet tombol ing sangisore pesen, bot kudu mbaleni perintah sing dikirim pesen iki.

Tinimbang kesimpulan

Mesthi, cara iki ora ndalang minangka panggantos kanggo cara sambungan klasik, nanging ngidini sampeyan kanggo cepet mangerteni bab negara server lan ngirim printah menyang sing ora mbutuhake output Komplek.

Source: www.habr.com

Add a comment