Powershel ile Cisco Switch’ler Üzerinde Yedek ve Rapor Al?nmas? (Taking Back Up and Report From Cisco Switches With Powershell)

Merhaba arkada?lar,
Bu makalede powershell üzerinden plink.exe’yi kullanarak ssh ba?lant? kurma ve bu ba?lant? sayesinde cisco switch’ler üzerinden yedek alma ve raporlama i?lemlerine de?inece?im.

Plink.exe, Putty.exe’nin komut sat?r? uygulamas?d?r ve http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html adresinden edinilebilir.

Senaryo olarak elimizde 10.1.11.10 Ip adresli bir switch’imiz var bu switch’in kullan?c? ad? “cisco” ve ?ifresi “cisco”. Kulland???m?z switch’imiz üzerinde herhangi bir sertifika otoritesinden al?nm?? bir sertifika kullan?lmamaktad?r. Bu nedenle uygulamay? çal??t?rmadan bir kerelik plink.exe ile manuel bir ba?lant? aç?yoruz ve gelen sertifika uyar?s?n? kabul ediyoruz.

Ayr?ca switch’e login olundu?unda do?rudan enable modunda i?lem yapmak gerekmektedir.(Bir sat?rdan fazla gönderinle komutlar farkl? IOS’larda desteklenmedi?inden tek sat?r komut gönderilmektedir. Bu nedenle privilege 15 olarak login olmak gerekmektedir.) Bu i?lem için standart ayarlar?n d???ndan swith’in ayar dosyas?na a?a??daki komutlar? ekliyoruz.
aaa new-model
aaa authentication login default local
aaa authorization exec default local
username cisco privilege 15 password cisco

Sonuç olarak elimizde switch’e login olundu?unda do?rudan enable moda geçen bir kullan?c?m?z var plink.exe ile ba?lant? kurdu?umuzda swith’in sertifikas? art?k kabul ediliyor.
Geçelim uygulamam?za:
Uygulaman?n bulundu?u dizinin görünü?ü ?u ?ekilde

Sshconnect.ps1 gerekli powershell scriptimizin bulundu?u dosyad?r. Komutlar? a?a??da tekrar payla?aca??m.

Devices.txt ise raporlama ve yedekleme yap?lacak cihazlar?n isim ve IP adreslerinin bulundu?u dosyad?r. Bu dosya içeri?inde isim ve IP aras?nda “;” kullanmak ve her cihaz? yeni bir sat?ra yazmak gerekmektedir.

Commands dizinin içeri?i ?u ?ekildedir:

Bu dizin içindeki dosyalar?n içeri?i de a?a??daki gibi:

Bu ad?mdan sonra uygulamam?z? çal??t?r?yoruz.

Uygulama backups dizini alt?na yeni bir klasör yarat?p yedekleri ve raporlar? buraya yazmaktad?r.


Uygulaman?n ç?kt? olarak üretti?i dosyalar?n içerikleri de ?u ?ekilde:

Gelelim uygulaman?n nas?l çal??t???n? detayl? olarak anlatmaya:
Script devices.txt dosyas? içindeki tüm cihazlar belirtilen kullan?c? ad? ve ?ifresi ile ba?lant? kurmaktad?r. Ba?lant? kurulan her switchde commands dizini içindeki tüm komutlar? çal??t?rmaktad?r. Bu komtlar?n ç?kt?lar? bacups dizini içerisine kaydedilmektedir. Bu sayede switch konfigürasyon yede?inin al?nmas? veya switch’ler üzerinden h?zl?ca raporlama yap?lmas? mümkün olabilecektir.
Uygulamada kullan?lan powershell scripti ?u ?ekilde:
$plink=Get-ChildItem plink.exe
$PlinkPath=$plink.tostring()

$username=”cisco”
$password=”cisco”

$devicesFile=Get-Item devices.txt
$devicesFilePath=$devicesFile.ToString()
$devices=Get-Content $devicesFilePath

$backup=Get-Item backups
$backupPath=$backup.ToString()

#$command=Get-ChildItem komut1.txt
#$commandPath=$command.tostring()
#$commandName=$commandPath.Substring($commandPath.LastIndexOf(‘\’)+1)
#$commandName=$commandName.Substring(0,$commandName.Indexof(‘.’))

$yol=Get-Item .\commands

$tarih=Get-Date -Format g
$tarih=$tarih.Replace(” “,””)
$tarih=$tarih.Replace(“:”,”.”)
$tarih=$tarih.Replace(“.”,”_”)

md $backupPath\$tarih

$commands=Get-ChildItem $yol
foreach($device in $devices)
{
$SshHostName=$device.substring(0,$device.indexof(‘;’))
$SshHost=$device.substring($device.indexof(‘;’)+1)
foreach($file in $commands)
{
$commandPath=$file.fullName
$commandName=$commandPath.Substring($commandPath.LastIndexOf(‘\’)+1)
$commandName=$commandName.Substring(0,$commandName.Indexof(‘.’))

$yer=$backupPath+”\”+$tarih+”\”+$SshHostName+”_”+$SshHost+”_”+$commandName+”.txt”

.\plink.exe -ssh -2 $SshHost -l $username -pw $password -m $commandPath > $yer

}
}

Write-Host “ISLEM TAMAMLANDI”

Bu powershell komutu zamanlanm?? görev haline getirilerek yedekleme ve raporlaman?n otomatik al?mas? sa?lanabilir. Powershell komutunun nas?l zamanlanm?? görev haline getirilece?i ile ilgili ?u makaleden yard?m alabilirsiniz:

http://sistemtecrubeleri.blogspot.com/2012/12/sunucu-veya-ag-cihazlarnn.html

Ayr?ca ?u an uygulamada kullan?c? ad? ve ?ifresi aç?k olarak bulunmaktad?r. Bu dosyan?n sunucu üzerinde bulunmas? sizi rahats?z edebilir. Kullan?c? ad? ve ?ifresinin kriptolu olarak saklamak için ?u makaleden yararlanabilirsiniz:

http://sistemtecrubeleri.blogspot.com/2012/12/powershell-ile-text-sifrelemek.html

Bu makaleden yararlanarak a?a??daki uygulamalar geli?tirilebilir.
1. Ortamdaki tüm Switch’lerdeki Error Disable Durumundaki portlar?n raporlanmas?:

Tüm switch’lerin interface status’lar?n? çektikten sonra elde edilen dosyalar üzerinde Dosya ve string i?lemleri ile sadece Error Disable Portlar?n raporlanmas? yap?labilir.

2. Ortamdaki tüm switch’lerdeki portlarda kullan?lan IP numaralar?n?n raporlanmas?

Tüm swithc’lerden mac address-table’lar? çekilir.(Bu tabloda mac adresi ve switch’in port e?le?mesi vard?r.) Routing i?lemi yapan cihazdan Arp tablosu çekilir(Bu tabloda Ip adresi ve Mac Adresi e?le?meleri bulunmaktad?r.) Elde edilen mac ve arp tablolar? dosya ve string i?lemleri ile e?le?tirilerek switch’lerin hangi portunda hangi IP adresinin kullan?ld??? raporuna ula??labilir.

?imdilik benim akl?ma gelenler bu ?ekilde ihtiyaçlar do?rultusunda ba?ka uygulama ve raporlar geli?tirilebilir.