Mise en place d'un dépôt TFTP
Dans mon entreprise, nous n’avions pas de système de centralisation de configuration pour les switchs en agence.
Pour répondre à ce besoin, j’ai mis en place un service de dépôt TFTP sur le serveur console de mon entreprise.
Pour ce faire, j’ai installé le service Tftpd64 GUI depuis le site officiel : https://pjo2.github.io/tftpd64/ Une fois le service mis en place et fonctionnel, j’ai développé deux scripts PowerShell permettant de :
- Redémarrer les switchs
- Exporter la configuration de l’équipement vers le serveur TFTP
Les scripts utilisent un fichier CSV contenant les noms ainsi que les adresses IP des switchs.
Le script pour redémarrer les switchs :
# Vérifier et installer le module Posh-SSH
if (-not (Get-Module -Name Posh-SSH -ListAvailable)) {
Write-Host "Installation du module Posh-SSH..."
Install-Module -Name Posh-SSH -Force -AllowClobber -Scope CurrentUser
}
Import-Module Posh-SSH
# Chemin vers le fichier CSV
$csvPath = "C:\Temp\list-switch.csv"
#Informations d'identifications
$username = "XXXXXXX"
$password = "XXXXXXX" | ConvertTo-SecureString -AsPlainText -Force
$credidential = New-Object System.Management.Automation.PSCredential($username, $password)
#Lire le fichier CSV
$switches = Get-Content -Path $csvPath | Select-Object -Skip 1
# Commande à exécuter
$command = "reboot"
foreach ($ip in $switches) {
Write-Host "Connexion à $ip ..."
#Établir la connexion SSH
$session = New-SSHSession -ComputerName $ip -Credential $credidential -AcceptKey
if($session.Connected) {
Write-Host "Connecté à $ip"
# Créer une invie ssh
$shell = New-SSHShellStream -SessionId $session.SessionId
#Envoyer un retour à la ligne
$shell.WriteLine("")
#Attendre la réponse
Start-Sleep -Seconds 2
#Envoyer la commande reboot
$shell.WriteLine("reboot")
#Attendre la réponse
Start-Sleep -Seconds 2
#envoi de la confirmation
$shell.WriteLine("y")
#Fermer la session
$session | Remove-SSHSession
Write-Host "Commande reboot envoyée à $ip"
} else {
Write-Host "Échec de la connexion à $ip"
}
}
Le script pour exporter la configuration :
# Vérifier et installer le module Posh-SSH
if (-not (Get-Module -Name Posh-SSH -ListAvailable)) {
Write-Host "Installation du module Posh-SSH..."
Install-Module -Name Posh-SSH -Force -AllowClobber -Scope CurrentUser
}
#Fonctionalité de log
#Récupération du nom du script et du chemin
$scriptName = $MyInvocation.MyCommand.Name
$logFileName = "logs_$($scriptName).txt"
$logFilePath = Join-Path -Path $PSScriptRoot -ChildPath $logFileName
#Fonction pour écrire dans le fichier de log
function Write-Log {
param(
[string]$Message,
[string]$Tag = "[PROCESS]"
)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logMessage = "[$timestamp] $Tag $Message"
#Afficher la sortie de log dans la console
Write-Host $logMessage
#Ecrit dans le fichier
$logMessage | Out-File -FilePath $logFilePath -Append -Encoding utf8
}
#Début du script
Write-Log -Message "Lancement du script $scriptName" -Tag "[PROCESS]"
Import-Module Posh-SSH
# Chemin vers le fichier CSV
$csvPath = "C:\Temp\list-switch.csv"
Write-Log -Message "Fichier CSV Présent" -Tag "[PROCESS]"
#Informations d'identifications
$username = read-host "Nom d'utilisateur"
$password = read-host "Mot de passe" | ConvertTo-SecureString -AsPlainText -Force
$credidential = New-Object System.Management.Automation.PSCredential($username, $password)
Write-Log -Message "Informations d'identifications récupérés" -Tag "[PROCESS]"
#Lire le fichier CSV
$switches = Import-Csv -Path $csvPath -Delimiter ";"
foreach ($switch in $switches) {
$ip = $switch.IP
$nom = $switch.Nom
$zone = $switch.Zone
Write-Log -Message "Connexion à $ip ..." -Tag "[PROCESS]"
#Établir la connexion SSH
$session = New-SSHSession -ComputerName $ip -Credential $credidential -AcceptKey
if($session.Connected) {
Write-Log -Message "Connecté à $ip" -Tag "[SUCCESS]"
# Créer une invie ssh
$shell = New-SSHShellStream -SessionId $session.SessionId
#Envoyer un retour à la ligne
$shell.WriteLine("")
#Attendre la réponse
Start-Sleep -Seconds 2
#Envoyer la commande d'export
$command = "copy startup-config tftp 10.32.0.139 Export_$zone.$nom.txt"
$shell.WriteLine("$command")
#Attendre la réponse
Start-Sleep -Seconds 2
#envoi de la confirmation
$shell.WriteLine("y")
#Fermer la session
$session | Remove-SSHSession
Write-Log -Message "Configuration exporté pour $nom" -Tag "[SUCCESS]"
} else {
Write-Log -Message "Échec de la connexion à $ip" -Tag "[ERROR]"
}
}
Write-Log -Message "Fin du script $scriptName" -Tag "[PROCESS]"
Il n'y a pas encore d'article ici.
