آموزشپایتون

تهیه نسخه پشتیبان از تجهیزات سیسکو توسط پایتون

تهیه نسخه پشتیبان از تجهیزات سیسکو توسط پایتون

اگر مدیر شبکه یا مهندس شبکه هستید، قطعا تا به امروز با مشکلات تنظیمات تجهیزات شبکه مواجه شده اید. این امکان وجود دارد که ناگهان روزی یکی از روترهای شما بدون هیچ گونه مشکل و خطایی از کار بیافتد. از آنجایی که از آخرین تنظیمات شما چند روز گذشته است بنابراین احتمال دارد که برخی از آن ها را فراموش کرده باشید. حال شما روتر از کار افتاده را تعویض کرده اید اما فراموش کرده اید که چه تنظیماتی را باید بر روی روتر قرار دهید؟ خب بدون هیچگونه پشتیبان گیری ، هیچ گزینه ای جز انجام تنظیمات از ابتدا ندارید و باید زمان زیادی را صرف تنظیمات مجدد روتر بگذارید.

امروزه بسیاری از مهندسان شبکه زمان های زیادی را صرف امور کوچکی مانند کارهای زیر می کنند:

  • تلاش برای بازیابی رمز عبور فراموش شده
  • تنظیمات از بین رفته، زیرا تنظیمات به درستی ذخیره نشده است.
  • تهیه نکردن نسخه پشتیبان ،بنابراین از ابتدا باید تنظیمات را انجام دهید.

بنابراین ما می دانیم که این یک چالش است اما چگونه آن را برطرف کنیم؟ بسیاری از ابزارهای نظارت بر شبکه در بازار موجود است که برای انجام همه این کارها طبق برنامه های تنظیم شده در دسترس است، اما اگر با شرایطی روبرو شوید که آن ابزارها یا پول لازم برای خرید آن را نداشته باشید و.. هنوز هم نیاز دارید که از دستگاه های شبکه به روشی برنامه ریزی شده نسخه پشتیبان تهیه کنید. بنابراین چالش این است که به ابزارهای تجاری موجود متکی نباشید بلکه از روش هایی استفاده کنید که بتوانید بصورت اتوماتیک نسخه پشتیبان تهیه کنید.

قبل از شروع، باید موارد زیر را مد نظر خود داشته باشید.

  • کدی که در انتهای این مقاله آمده است را دانلود کنید و آن را در رایانه شخصی خود ذخیره کنید.
  • یک فایل .TXT ایجاد کنید که دارای لیستی از آدرس IP host باشد که باید از آن نسخه پشتیبان تهیه شود.
  • حتماً مکان صحیح فایل host را در اسکریپت پایتون قرار دهید.
  • قابلیت SSH همه روترها باید فعال باشد، می توانید این کار را با telnet نیز انجام دهید.

در زیر اسکریپت و توضیحی برای تهیه نسخه پشتیبان از روتر ارائه شده است.

import sys
import time
import paramiko
import os
import cmd
import datetime

now = datetime.datetime.now()
user = raw_input("Enter username:")
password = raw_input("Enter Paswd:")
enable_password = raw_input("Enter enable pswd:")
port=22

درکد بالا فایل f0 را می خوانیم که در همان دایرکتوری که کد پایتون در آن نوشته شده  قرار دارد و آدرس های  Host IP را که برای اجرای آن نیاز است، استخراج می کنیم.

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,port, user, password, look_for_keys=False)
chan = ssh.invoke_shell()
time.sleep(2)

در کد بالا، متغیرهای اختصاص داده شده (نام کاربری ، رمز عبور ، فعال کردن رمز عبور ، IP میزبان و شماره پورت) را به سوکت ssh و آغاز اتصال اختصاص می دهیم. پس از برقراری اتصال می توانیم برای ارسال فرمان ها و خواندن خروجی ها از کانال استفاده كنیم.

chan.send('enable\n')
chan.send(enable_password +'\n')
time.sleep(1)
chan.send('term len 0\n')
time.sleep(1)
chan.send('sh run\n')
time.sleep(20)
output = chan.recv(999999)

در کد فوق فقط برخی از دستورات را در فواصل زمان خواب به روتر می فرستیم. مانند “term lengh 0” ، “show run” و غیره

توجه: اطمینان حاصل کنید که زمان خواب مناسب را بعد از اجرای فرمان قرار داده اید تا بتوانید خروجی کامل آن دستور را جمع کنید، بعضی از دستورات، زمان اجرای برنامه مانند show tech را می طلبد، برای دستوراتی مانند این باید زمان خواب بیشتری برای اسکریپت داشته باشید.

filename = "%s_%.2i%.2i%i_%.2i%.2i%.2i" % (ip,now.year,now.month,now.day,now.hour,now.minute,now.second)
f1 = open(filename, 'a')
f1.write(output.decode("utf-8") )
f1.close()
ssh.close()
f0.close()

در کد بالا ، فقط تنظیمات را ذخیره می کنیم و پرونده هایی را که در قسمت های اولیه کد باز شده اند، می بندیم.

در ادامه اسکریپت کامل را مشاهده میکنید.

import sys
import time
import paramiko
import os
import cmd
import datetime

now = datetime.datetime.now()
user = raw_input("Enter username:")
password = raw_input("Enter Paswd:")
enable_password = raw_input("Enter enable pswd:")
port=22
f0 = open('cisco.txt')
for ip in f0.readlines():
ip = ip.strip()
filename_prefix ='/Users/shambhu/Documents' + ip
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,port, user, password, look_for_keys=False)
chan = ssh.invoke_shell()
time.sleep(2)
chan.send('enable\n')
chan.send(enable_password +'\n')
time.sleep(1)
chan.send('term len 0\n')
time.sleep(1)
chan.send('sh run\n')
time.sleep(20)
output = chan.recv(999999)
filename = "%s_%.2i%.2i%i_%.2i%.2i%.2i" % (ip,now.year,now.month,now.day,now.hour,now.minute,now.second)
f1 = open(filename, 'a')
f1.write(output.decode("utf-8") )
f1.close()
ssh.close()
f0.close()

مراحل اجرای backup گرفتن (دستی):

کد پایتون را روی رایانه شخصی خود اجرا کنید. کد تمام آدرسهای IP را از فایل txt  که ذخیره کرده اید، دانلود می کند و از آن نسخه پشتیبان تهیه می کند.

برای محل ذخیره فایل پشتیبان، مکان ذکر شده در کد (کاربران / shambhu / اسناد در پرونده من) را تأیید کنید.

مراحل اجرای پشتیبان گرفتن  به طور برنامه ریزی شده (اتوماتیک):

  • برای انجام این کار، اولین و مهمترین چیز این است که نام کاربری و رمز عبور را در اسکریپت قرار دهید تا نیازی به آن نداشته باشید که مانند هر کد قبلی، آن را به صورت دستی قرار دهید.
  • برنامه را برای اجرای زمان خاص در روز برنامه ریزی کنید. در ویندوز می توانید آن را با زمانبندی انجام دهید. در مک بوک این کار را با crontab انجام می دهند. یک برنامه حتی ساده تر یا برنامه روزانه ، هفتگی و ماهانه در MAC وجود دارد. تمام کاری که شما باید انجام دهید این است که کپی اسکریپت خود را در پوشه Daily / Weekly / Monthly در فهرست زیر قرار دهید:
bash-3.2# cd /etc/periodic/
bash-3.2# ls
daily monthly weekly
bash-3.2#
اسکریپت برنامه ریزی شده به این شکل به نظر می رسد.

import sys
import time
import paramiko
import os
import cmd
import datetime

now = datetime.datetime.now()
# mention username and password
user = "cisco"
password = "cisco"
enable_password = "cisco"
# mention username and password
port=22
f0 = open('cisco_routerswitch.txt')
for ip in f0.readlines():
ip = ip.strip()
filename_prefix ='/Users/shambhu/Documents' + ip
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,port, user, password, look_for_keys=False)
chan = ssh.invoke_shell()
time.sleep(2)
chan.send('enable\n')
chan.send(enable_password +'\n')
time.sleep(1)
chan.send('term len 0\n')
time.sleep(1)
chan.send('sh run\n')
time.sleep(20)
output = chan.recv(999999)
filename = "%s_%.2i%.2i%i_%.2i%.2i%.2i" % (ip,now.year,now.month,now.day,now.hour,now.minute,now.second)
f1 = open(filename, 'a')
f1.write(output.decode("utf-8") )
f1.close()
ssh.close()
f0.close()

بنابراین این یک روش کامل برای تهیه backup  گیری دوره ای برای دستگاه های سیسکو است. امیدوارم از این آموزش استفاده کرده باشید .

موفق باشید

منبع
protocoholic

ایمان جعفری

کارشناس NOC و پشتیبانی شبکه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


دکمه بازگشت به بالا