Python SSH İle Ağ Cihazlarına Toplu Config Yollama

Python SSH İle Ağ Cihazlarına Toplu Config Yollama (Configure Multiple Network Devices With Python SSH)

Merhabalar bu makalemde Python ile ağ cihazları yönetimine yönelik ufak scriptler hazırlamayı ele aldım. Her işletmede sorun olan toplu konfigürasyon yapmayı nasıl daha kolay ve merkezi yapabilirim gibi sorularınıza yanıt olabilecek bu makale çalışmalarınız için bir basamak olabilir.

SSH pycharm python

Öncelikle Python’da cihazlara SSH ile bağlanmamız gerekiyor. Bunu ise Paramiko isimli Python kütüphanesini kullanarak yapıyoruz.

Örnek class aşağıdaki gibidir:

Kod:

# -*- coding: utf-8 -*-
import paramiko
__author__ = 'Nexus'
class SSHConnect(object):
    def __init__(self, host, uname, passwd):
        self.host = host
        self.uname = uname
        self.passwd = passwd
        self.devclient = paramiko.SSHClient()
        self.devclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.devclient.connect(host, username=uname, password=passwd)
    def runCommand(self, cmd):
        self.devclient.invoke_shell()
        stdin, stdout, stderr = self.devclient.exec_command(cmd)
        return stdout.readline()
    def closeConnection(self):
        self.devclient.close()

BuNetwork Gigabit Smart Switch with cables arada SSHConnect’i kullanarak cihazlara SSH ile login olabilir ve komut yollayabiliriz. Bu işlemi gösteren basit bir uygulama aşağıdaki gibidir:

Kod:

cmd="uptime" # -----> Her hangi bir komut olabilir.. 
veya 
cmd=input(">>>") # ------> Bu kullanım şekli ile de birkaç ekleme ile interaktif shell'de yapabilirsiniz. 
con = SSHConnect("ip", "username", "password") #--> Örn: SSHConnect("10.10.10.1","usr","parola123")
    cli = con.runCommand(cmd)
    con.closeConnection()
    for value in cli:
          print value

     Yukarıdaki örnekte 10.10.10.1 ip adresli cihaza login olduk ve “up time” komutunu çalıştırdık. Bu işlemi 100 kadet veya 1000 adet cihaza uygulamız gerektiğini düşünelim. Hepsine tek tek bağlanıp yapılandırma girsek ne kadar zamanımızı alır? Her birisi en iyi ihtimalle 5 dakika zaman alsa, 100 adet cihaza bu komutu yollamak 5×100=500 dk, yani neredeyse 10 saat zaman alacak.

     Bu işlemi 1 dakikada yapmak mümkün ve uygulaması bir o kadar kolaydır. Bu makalede seçtiğim yapılandırma ağ cihazlarının parolasını değiştirmek olsun. Başlamadan önce ağda yapılandırma yollayacağımız tüm cihazlarımızın ip adreslerini bilmemiz gerekiyor. Tüm ip adreslerimizi ip_adresleri.txt dosyasında sakladığımızı düşünelim. Sonra cihazlara şifre değiştirmek için gerekli olan aşağıdaki komutları yollayalım.

Kod:

configure terminal
usename admin privilege level 15 password yeniparola
do wr

Sonra da işlemimizin sonuçunu aşağıdaki komutla alarak sonuçları bir log dosyasına yazarak kayıtlandıralım :

Kod:

do show run | include username

Yukarıdaki anlatıklarımı yapan kısa uygulama aşağıdaki gibi olacaktır:

Kod:

# -*- coding: utf-8 -*-
import paramiko
import os
__author__ = 'Nexus'
########### SSH CLASS'ın oluşturulması##############
class SSHConnect(object):
    def __init__(self, host, uname, passwd):
        self.host = host
        self.uname = uname
        self.passwd = passwd
        self.devclient = paramiko.SSHClient()
        self.devclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.devclient.connect(host, username=uname, password=passwd)
    def runCommand(self, cmd):
        self.devclient.invoke_shell()
        stdin, stdout, stderr = self.devclient.exec_command(cmd)
        return stdout.readline()
    def closeConnection(self):
        self.devclient.close()
########### Yollanacak komutların Oluşturulması ##############
cmd1="conf t"
cmd2="username admin privilege 15 pass yeniparola"
cmd3="do wr"
cmd4="do show run | include username"
####### LOG DOSYASININ OLUŞTURUP YETKİLENDİRİLMESİ ##########
os.system("touch /home/user/log.txt") 
os.system ("chmod +x /home/user/log.txt")
########### Komutların Toplu Olarak Yollanması ve Log########
with open ("/home/murat/ip_adresler.txt") as cihaz_f:
	cihazlar=cihaz_f.readlines()
	cihaz_f.close()
for line in cihazlar:
	ip=line.rstrip()
	print ip+" ip adresli cihaza config uygulanıyor....:"
	con = SSHConnect(ip, "admin", "eski parola")
	cli1 = con.runCommand(cmd1)
	cli2 = con.runCommand(cmd2)
	cli3 = con.runCommand(cmd3)
	cli4 = con.runCommand(cmd4)
	con.closeConnection()
	log_dosya = open("/home/user/log.txt" ,"w")
	log_dosya.write(ip + " adresli cihazın yeni parolası : \'"+ cli4 + "\' )
	log_dosya.close()

Murat KAYAPINAR

Net & Sys Admin

Software Developer

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir