เข้าถึงเซิร์ฟเวอร์ linux โดยใช้ Telegram bot ใน Python

บ่อยครั้งที่มีสถานการณ์ที่ต้องเข้าถึงเซิร์ฟเวอร์ที่นี่และตอนนี้ อย่างไรก็ตาม การเชื่อมต่อผ่าน SSH ไม่ใช่วิธีที่สะดวกที่สุดเสมอไป เนื่องจากคุณอาจไม่มีไคลเอ็นต์ SSH, ที่อยู่เซิร์ฟเวอร์ หรือชุดผู้ใช้/รหัสผ่านอยู่ในมือ มีแน่นอน Webminซึ่งทำให้การดูแลระบบง่ายขึ้น แต่ก็ไม่ได้ให้การเข้าถึงแบบทันทีเช่นกัน

ดังนั้นฉันจึงตัดสินใจใช้วิธีง่ายๆ แต่น่าสนใจ กล่าวคือเพื่อเขียนบอท Telegram ซึ่งเมื่อเปิดตัวบนเซิร์ฟเวอร์เองจะดำเนินการคำสั่งที่ส่งไปและส่งคืนผลลัพธ์ เคยเรียน บาง บทความ ในหัวข้อนี้ ฉันรู้ว่ายังไม่มีใครอธิบายการใช้งานดังกล่าว

ฉันใช้โปรเจกต์นี้บน Ubuntu 16.04 แต่เพื่อให้ใช้งานได้โดยปราศจากปัญหาบนดิสทริบิวชันอื่นๆ ฉันพยายามทำให้ทุกอย่างเป็นแบบทั่วไป

การลงทะเบียนบอท

ลงทะเบียนบอทใหม่กับ @BotFather เราไปส่งเขา /newbot และเพิ่มเติมในข้อความ เราต้องการโทเค็นบอทใหม่และรหัสของคุณ (คุณสามารถรับได้ เช่น จาก @userinfobot).

การเตรียมหลาม

ในการรันบอท เราจะใช้ไลบรารี่ telebot (pip install pytelegrambotapi). การใช้ห้องสมุด subprocess เราจะดำเนินการคำสั่งบนเซิร์ฟเวอร์

การเปิดตัวบอท

สร้างไฟล์ bot.py บนเซิร์ฟเวอร์:
nano bot.py

และวางโค้ดลงไป:

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

เราแทนที่โทเค็นบอทในนั้นด้วยโทเค็นที่ออกโดย @BotFather และ user_id ด้วยค่ารหัสของบัญชีของคุณ จำเป็นต้องตรวจสอบรหัสผู้ใช้เพื่อให้บอทให้การเข้าถึงเซิร์ฟเวอร์ของคุณแก่คุณเท่านั้น การทำงาน check_output() ดำเนินการคำสั่งที่กำหนดและส่งกลับผลลัพธ์

มันยังคงเป็นเพียงการเริ่มต้นบอท สำหรับกระบวนการทำงานบนเซิร์ฟเวอร์ ฉันชอบที่จะใช้ screen (sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(โดยที่ "ServerBot" คือ ID กระบวนการ)

กระบวนการจะทำงานโดยอัตโนมัติในพื้นหลัง ไปที่บทสนทนากับบอตและตรวจสอบว่าทุกอย่างทำงานได้ตามที่ควร:

เข้าถึงเซิร์ฟเวอร์ linux โดยใช้ Telegram bot ใน Python

ยินดีด้วย! บอทดำเนินการตามคำสั่งที่ส่งไป ในการเข้าถึงเซิร์ฟเวอร์ คุณเพียงแค่ต้องเปิดบทสนทนากับบอท

การทำซ้ำคำสั่ง

บ่อยครั้งในการตรวจสอบสถานะของเซิร์ฟเวอร์ คุณต้องใช้คำสั่งเดียวกัน ดังนั้นการใช้คำสั่งซ้ำ ๆ โดยไม่ส่งซ้ำจะไม่เข้าที่มากนัก

เราจะดำเนินการโดยใช้ปุ่มอินไลน์ใต้ข้อความ:

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

รีสตาร์ทบอท:

killall python3
screen -dmS ServerBot python3 bot.py

ตรวจสอบอีกครั้งว่าทุกอย่างถูกต้อง:

เข้าถึงเซิร์ฟเวอร์ linux โดยใช้ Telegram bot ใน Python

โดยการกดปุ่มใต้ข้อความ บอทจะต้องทำซ้ำคำสั่งที่ส่งข้อความนี้

แทนการสรุป

แน่นอนว่าวิธีนี้ไม่ได้เป็นการแทนที่วิธีการเชื่อมต่อแบบคลาสสิก แต่จะช่วยให้คุณทราบสถานะของเซิร์ฟเวอร์ได้อย่างรวดเร็วและส่งคำสั่งไปยังเซิร์ฟเวอร์ที่ไม่ต้องการเอาต์พุตที่ซับซ้อน

ที่มา: will.com

เพิ่มความคิดเห็น