Shpesh ndodhin situata ku qasja në server është e nevojshme këtu e tani. Megjithatë, lidhja përmes SSH nuk është gjithmonë mënyra më e përshtatshme, sepse mund të mos ketë një klient SSH, adresën e serverit ose çiftin "përdorues/fjalëkalim" në dispozicion. Sigurisht, ka , i cili e lehtëson administrimin, por gjithashtu nuk ofron qasje momentale.
Prandaj, vendosa të realizoj një zgjidhje të thjeshtë, por interesante. Pikerisht – të shkruaj një bot Telegrami, i cili, duke u nisur nga vetë serveri, do të ekzekutojë komandat e dërguara dhe do të kthejë rezultatet. Pasi studova në këtë fushë, kuptova se nuk kishte realizime të ngjashme të përshkruara nga askush tjetër.
Ky projekt e realizova në Ubuntu 16.04, por për një nisje pa probleme në distribucione të tjera përpiqesha ta bëj gjithçka në një formë të përgjithshme.
Regjistrimi i botit
Regjistroni një bot të ri te @BotFather. Dërgojini atij /newbot dhe më tej sipas tekstit. Na duhen token i botit të ri dhe id juaj (mund ta merrni, për shembull, nga ).
Përgatitja e Python-it
Për të nisur botin do të përdorim bibliotekën telebot (pip install pytelegrambotapi). Me ndihmën e bibliotekës subprocess do të ekzekutojmë komandat në server.
Nisja e botit
Në server krijojmë skedarin bot.py:
nano bot.py
Dhe e fusim në të kodin:
from subprocess import check_output
import telebot
import time
bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")#token i botit
user_id = 0 #id i llogarisë tuaj
@bot.message_handler(content_types=["text"])
def main(message):
if (user_id == message.chat.id): #kontrollojmë se kush po shkruan
comand = message.text #teksti i mesazhit
try: #nëse komanda nuk mund të ekzekutohet - check_output do të shkaktojë exception
bot.send_message(message.chat.id, check_output(comand, shell = True))
except:
bot.send_message(message.chat.id, "Hyrje e pavlefshme") #nëse komanda është jo korrekte
if __name__ == '__main__':
while True:
try:#shtojmë try për punë pa ndërprerje
bot.polling(none_stop=True)#nisja e botit
except:
time.sleep(10)#në rast rënie
Zëvendësojmë në të token e botit me atë që dha @BotFather, dhe user_id me vlerën e id të llogarisë tuaj. Kontrollimi i id të përdoruesit është i nevojshëm që boti të ofrojë qasje në serverin tuaj vetëm për ju. Funksioni check_output() ekzekuton komandën e dërguar dhe kthen rezultatin.
Ka mbetur vetëm të nisim botin. Për të nisur proceset në server preferoj të përdor ekrani (sudo apt-get install screen):
screen -dmS ServerBot python3 bot.py(ku "ServerBot" është identifikuesi i procesit)
Procesi do të nisë automatikisht në mënyrë të fshehtë. Tani kalojmë në dialogun me botin dhe kontrollojmë që gjithçka funksionon si duhet:

Urime! Boti ekzekuton komandat që i dërgoni. Tani, për të pasur qasje në server, ju mjafton të hapni dialogun me botin.
Përsëritja e komandave
Shpeshherë, për të monitoruar gjendjen e serverit, nevojitet të ekzekutohen të njëjtat komandat. Prandaj, implementimi i përsëritjes së komandave pa nevojën për t'i dërguar sërish ato do të ishte shumë i dobishëm.
Do ta realizojmë me ndihmën e butonave inline nën mesazhet:
from subprocess import check_output
import telebot
from telebot import types #Shtojmë importimin e butonave
import time
bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")#Token i botit
user_id = 0 #id i llogarisë tuaj
@bot.message_handler(content_types=["text"])
def main(message):
if (user_id == message.chat.id): #kontrollojmë se kush po shkruan
comand = message.text #teksti i mesazhit
markup = types.InlineKeyboardMarkup() #krijojmë një tastierë
button = types.InlineKeyboardButton(text="Përsëriti", callback_data=comand) #krijojmë butonin
markup.add(button) #shtojmë butonin në tastierë
try: #nëse komanda nuk mund të ekzekutohet - check_output do të shkaktojë exception
bot.send_message(user_id, check_output(comand, shell = True, reply_markup = markup)) #ekzekutojmë komandën dhe dërgojmë mesazhin me rezultat
except:
bot.send_message(user_id, "Hyrje e pavlefshme") #nëse komanda është jo korrekte
@bot.callback_query_handler(func=lambda call: True)
def callback(call):
comand = call.data #lexojmë komandën nga fusha e butonit data
try:#nëse komanda nuk mund të ekzekutohet - check_output do të shkaktojë exception
markup = types.InlineKeyboardMarkup() #krijojmë një tastierë
button = types.InlineKeyboardButton(text="Përsëriti", callback_data=comand) #krijojmë butonin dhe dërgojmë komandën në data
markup.add(button) #shtojmë butonin në tastierë
bot.send_message(user_id, check_output(comand, shell = True), reply_markup = markup) #ekzekutojmë komandën dhe dërgojmë mesazhin me rezultat
except:
bot.send_message(user_id, "Hyrje e pavlefshme") #nëse komanda është jo korrekte
if __name__ == '__main__':
while True:
try:#shtojmë try për punë pa ndërprerje
bot.polling(none_stop=True)#nisja e botit
except:
time.sleep(10)#në rast rënie
Rivendosim botin:
killall python3
screen -dmS ServerBot python3 bot.py
Sakti kontrollojmë që gjithçka funksionon si duhet:

Duke klikuar butonin nën mesazhin, boti duhet të përsërisë komandën nga e cila u dërgua ky mesazh.
Në vend të përfundimit
Sigurisht, kjo metodë nuk pretendon të jetë një zëvendësim për mënyrat tradicionale të lidhjes, por ajo lejon të mësosh mjaft shpejt për gjendjen e serverit dhe të dërgosh komanda që nuk kërkojnë dalje të komplikuara.
Burimi: habr.com
