Suite à la fausse manipulation d’un admin de mon entreprise qui avait fait planter un switch, et qui bien évidement n’avait pas fait de sauvegarde avant de la conf (write memory), je poste une solution de sauvegarde automatique.
Pré-requis
- Serveur windows ayant accès au vlan des switchs (si besoin)
- Installez WINSCP
- Sur les switchs : services SSH et transfert de fichier activés
Configuration des switchs
Il faut que le SSH soit activé sur le switch
conf t
Récupérez le fingerprint du ssh avec la commande
sh ip host-public-key fingerprint
Activez le transfert de fichier
ip ssh filetransfer
Sauvegardez la conf
wr mem
exit
Scripts de sauvegarde
Je précise que le script n’est pas de moi et que je l’ai juste adapté.
J’ai laissé exprès le nom de l’auteur dans le script.
Les deux fichiers sont dans le même répertoire et un répertoire va se créer pour chaque Switch.
Dedans seront sauvegarde à la fois le fichiers « startup » et le fichier « running »
Les fichiers de plus de 30 jours seront effacés automatiquement.
Backup_Switches.ps1
#Created by: James Preston of The Queen's College, Oxford
#Version: 1.0 on 02/11/2015 17:05
#Website: http://myworldofit.net
# Load the .NET assembly for WinSCP
# Installer WINSCP sur la VM de sauvegarde
# Utilisation de la DLL de Winscp
Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"
# Importer le fichier CSV contenant les détails de l'interrupteur et le stocker dans une variable
$switches = Import-Csv -Path "C:\SCRIPTS\switches.csv"
# Obtenir la date actuelle du système au format année/mois/date
# qui sera utilisée pour nommer le fichier de sauvegardes
$date = Get-Date -Format yyyy-MM-dd
# Bouclez sur les lignes du fichier CSV
Foreach ($line in $switches) {
# Définir le dossier dans lequel stocker les résultats et le créer s'il n'existe pas.
$outputfolder = "S:\Switchs\RUNNING CONFIG\" + $line.hostname + "\"
New-Item $outputfolder -ItemType Directory
# supprime les fichiers de plus de 30 jours
Get-ChildItem $outputfolder -Recurse | Where CreationTime -lt (Get-Date).AddDays(-30) | Remove-Item -Force -Recurse
# Définir le chemin d'accès pour stocker le résultat du téléchargement
# $outputpath1 chemin de sauvegarde de startup-config sur le serveur
$outputpath1 = $outputfolder + "startup-" + $date
$outputpath2 = $outputfolder + "running-" + $date
# Stocker les détails de la session
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.Protocol = [WinSCP.Protocol]::Sftp
$sessionOptions.HostName = $line.hostname
$sessionOptions.UserName = $line.username
$sessionOptions.Password = $line.password
$sessionOptions.SshHostKeyFingerprint = $line.sshhostfingerprint
$session = New-Object WinSCP.Session
# Processus de connexion aux switchs
$session.Open($sessionOptions)
# Definition des options de transfert
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
# Télécharger la configuration de démarrage
# (le résultat de la dernière « écriture de la mémoire » à partir de la CLI des commutateurs)
# et la sauvegarder sur le chemin de sortie.
# transferResult1 - chemin du fichier startup-config sur le switch
$transferResult1 = $session.GetFiles("/cfg/startup-config", $outputpath1, $False, $transferOptions)
#transferResult2 - chemin du fichier startup-config sur le switch
$transferResult2 = $session.GetFiles("/cfg/running-config", $outputpath2, $False, $transferOptions)
(get-item $outputpath1).set_LastWriteTime($date)
(get-item $outputpath2).set_LastWriteTime($date)
# Deconnexion des sessions
$session.Dispose()
}
switches.csv
Le fichier contient tous paramètres de connexions des switchs
hostname,username,password,sshhostfingerprint
Exemple :
10.16.16.265,manager,mot_de_passe,ssh-rsa 2048 7f:a8:9b:83:bb:f9:23:f5:9e:51:ad:40:1a:e5:93:0b
Il suffit ensuite de programmer une tache journalière dans le « Gestionnaire de tache ».