Kegiatan backup merupakan hal penting, terutama untuk seorang administrator, Bayangkan saja bagaimana kalo ternyata config baru yang kita terapkan mengakibatkan terjadinya masalah, syukur kalo kita bisa rollback config terkahir tapi kalo ternyata lupa ? atau tetiba perangkatnya crash dan harus digantikan dengan perangkat cadangan ? dengan adanya file backup kedua contoh case yang sering dialami administrator akan cepat untuk diperbaiki.

Namun terkadang kegiatan backup lain ini adalah kegiatan yang membosankan dan mungkin bisa menyita kurang sedikitnya waktu yang kita bisa gunakan untuk mengerjakan hal lain, apalagi ternyata perangkat yang harus di backup jumlahnya banyak.

Untuk mempermudah saya sebagai administrator dibuatlah script ini yang berguna untuk melakukan semua backup konfigurasi untuk router dan switch Cisco yang kemudian file backupan tersebut dikirim via email.

Script menggunakan liblary paramiko dari python, script akan login ke perangkat cisco dan menjalankan perintah untuk backup yang kemudian outputan dari perintah backup tersebut disimpan kedalam sebuah file yang nantinya akan dikirimkan via email ke administrator.

Berikut adalah script nya (Script menggunakan bahasa pemograman python versi 2.7).

#!/usr/local/bin/python2.7
import paramiko
import time
import datetime
import os
from os import path
##lib untuk kirim email
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders

devices = ["router1", "router2", "router3", "router4", "router5", "switch1", "switch2", "switch3", "switch4", "swtich5"]
for device in devices:
        username = "myusername"
        folder_backup = "/home/xxxx/public_html/xxxxxx/tools/xxxxx/backup_noc/backup"
        password = 'mypassword'
        now = datetime.datetime.now()
        now = now.strftime("%Y-%m-%d-%H-%M")
        log_file = "/home/xxxx/public_html/xxxxxx/tools/xxxxx/log_file/" + "ssh" + "-" + now +".log"
        paramiko.util.log_to_file(log_file)
        client=paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(device, port=22, username=username,password=password,look_for_keys=False, allow_agent=False)
        #if path.exists(folder_backup+"/"+device + "-" + now):
        #       os.remove(folder_backup+"/"+device + "-" + now)

        #chan=client.get_transport().open_session()
        key = True
        chan=client.get_transport().open_session()
        execute_command = chan.exec_command("sh run")
        #write_config = chan.exec_command("wr")
        time.sleep(1)

        while key:
                if chan.recv_ready():
                        output = chan.recv(65535)
                        file = open(folder_backup+"/"+device + "-" + now + ".txt", "a+")
                        file.write(output)
                if chan.exit_status_ready():
                        key = False
                        file.close()
                        client.close()
        time.sleep(10)

        ##send mail
        fromaddr = "me@email.com"
        toaddr = "me@email.com"
        body_email = "This is File config for device " + device + "\n" + "Please check attachment file, That file correct ? or fully backuped ?"
        msg = MIMEMultipart()

        msg['From'] = fromaddr
        msg['To'] = toaddr
        msg['Subject'] = "Backup config for "+ device
        body = body_email
        msg.attach(MIMEText(body, 'plain'))
        filename = device + "-" + now + ".txt"
        attachment = open(folder_backup+ "/" + filename, "rb")
        part = MIMEBase('application', 'octet-stream')
        part.set_payload((attachment).read())
        encoders.encode_base64(part)
        part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
        msg.attach(part)
        server = smtplib.SMTP('email.com.id', 587)
        server.starttls()
        server.login(fromaddr, "mypassword_email_to_login_in_email.com")
        text = msg.as_string()
        server.sendmail(fromaddr, toaddr, text)
        server.quit()

script di atas akan di jalankan via crontab setiap 7 hari sekali (seminggu sekali).

Script dijalankan via crontab

Hasil backup di kirim ke email :

Referensi Artikel : https://notets.wordpress.com/2018/10/28/automatic-backup-router-switch-cisco-dengan-paramiko-di-python-2-7/