
Image by: Brett Sayles
Pourquoi la programmabilité réseau transforme votre métier
Saviez-vous que 78% des pannes réseau sont causées par des erreurs de configuration manuelle selon Gartner? Dans un monde où les infrastructures gagnent en complexité, la programmabilité réseau avec Python devient un impératif pour les administrateurs système. Imaginez exécuter des tâches répétitives sur des centaines d’appareils en quelques secondes plutôt qu’en heures. Ce tutoriel vous guide pas à pas dans l’automatisation réseau via la bibliothèque Netmiko, spécialement conçue pour interagir avec les équipements Cisco, Juniper et autres. Vous apprendrez à configurer votre environnement, développer un script robuste de sauvegarde de configurations, et sécuriser vos accès SSH. Une compétence indispensable pour moderniser votre pratique et gagner en efficacité opérationnelle.
Configuration de votre environnement python pour netmiko
Avant de plonger dans l’automatisation, préparons votre station de travail. Netmiko repose sur Python 3.6+ et nécessite quelques dépendances clés. Commencez par installer Python via le site officiel, en cochant « Add to PATH » durant l’installation. Ouvrez ensuite votre terminal et créez un environnement virtuel :
python -m venv netmiko-env(crée un environnement isolé)netmiko-env\Scripts\activate(Windows) ousource netmiko-env/bin/activate(Linux/macOS)pip install netmiko cryptography(cryptography chiffrera vos identifiants)
Vérifiez l’installation avec un script test :
import netmiko
print(netmiko.__version__) # Doit afficher 4.1.2 ou supérieur
Netmiko supporte plus de 25 fournisseurs réseau. Voici sa compatibilité avec les principaux OS :
| Constructeur | OS supportés | Protocol |
|---|---|---|
| Cisco | IOS, IOS-XE, NX-OS, ASA | SSH/Telnet |
| Juniper | Junos | SSH |
| HP | ProCurve, Comware | SSH |
| Fortinet | FortiOS | SSH |
Dépannage courant
Si pip échoue sur Windows, installez les outils de build C++. Les erreurs de dépendances se résolvent généralement par pip install -U setuptools wheel.
Écriture d’un script de sauvegarde automatique
Automatiser les sauvegardes de configuration prévient les catastrophes. Voici un script complet qui récupère les configurations via SSH et les stocke localement avec horodatage :
from netmiko import ConnectHandler
from datetime import datetime
# Définition des paramètres de l’appareil
switch = {
‘device_type’: ‘cisco_ios’,
‘host’: ‘192.168.1.1’,
‘username’: ‘admin’, # À remplacer par des identifiants sécurisés
‘password’: ‘secret’,
‘port’: 22,
}
try:
# Connexion SSH
with ConnectHandler(**switch) as net_connect:
# Exécution de la commande
output = net_connect.send_command(‘show running-config’)
# Génération du nom de fichier
date_str = datetime.now().strftime(« %Y%m%d_%H%M%S »)
filename = f »config_{switch[‘host’]}_{date_str}.txt »
# Sauvegarde locale
with open(filename, ‘w’) as backup_file:
backup_file.write(output)
print(f »Backup réussi : {filename} »)
except Exception as e:
print(f »Échec de sauvegarde : {str(e)} »)
Étapes clés expliquées
- ConnectHandler : Établit la connexion SSH avec le dictionnaire de paramètres
- send_command : Exécute toute commande en mode enable
- Gestion des erreurs : Le bloc try/except capture les échecs de connexion ou timeout
- Horodatage : Garantit l’unicité des fichiers avec la date/heure exacte
Pour étendre ce script à plusieurs appareils, créez une liste de dictionnaires et une boucle. Consultez notre guide d’automatisation avancée pour des techniques d’exécution parallèle.
Gestion sécurisée des identifiants ssh
Stocker des mots de passe en clair dans les scripts est inacceptable. Utilisez plutôt le module Python cryptography :
- Générez une clé de chiffrement :
from cryptography.fernet import Fernet; print(Fernet.generate_key().decode()) - Créez un fichier credentials.py :
from cryptography.fernet import Fernet
# À exécuter UNE FOIS pour générer la clé
# key = Fernet.generate_key()
# with open(« secret.key », « wb ») as key_file:
# key_file.write(key)def encrypt_password(password):
with open(« secret.key », « rb ») as key_file:
key = key_file.read()
return Fernet(key).encrypt(password.encode())def decrypt_password(encrypted_password):
with open(« secret.key », « rb ») as key_file:
key = key_file.read()
return Fernet(key).decrypt(encrypted_password).decode() - Utilisation dans votre script principal :
from credentials import decrypt_password
encrypted_pwd = b’gAAAAABk…’ # Remplacer par votre mot de passe chiffré
switch[‘password’] = decrypt_password(encrypted_pwd)
Meilleures pratiques de sécurité :
- Restreignez les permissions du fichier secret.key (chmod 600)
- Ne versionnez JAMAIS secret.key dans Git
- Utilisez des comptes SSH à privilèges limités
- Auditez régulièrement les accès avec nos solutions de supervision
Automatisation avancée et bonnes pratiques
Pour industrialiser vos scripts, adoptez ces stratégies éprouvées :
Gestion centralisée des inventaires
Utilisez un fichier YAML (devices.yaml) pour décrire votre parc :
devices:
– name: core-switch1
host: 10.1.1.1
type: cisco_ios
– name: edge-router2
host: 10.1.1.2
type: juniper_junos
Chargez-le dans Python avec PyYAML : import yaml; devices = yaml.safe_load(open('devices.yaml'))['devices']
Journalisation robuste
Ajoutez ceci en début de script pour tracer les opérations :
import logging
logging.basicConfig(
filename=’netmiko_global.log’,
level=logging.DEBUG,
format=’%(asctime)s – %(levelname)s – %(message)s’
)
Gestion des erreurs réseau
Netmiko lève des exceptions spécifiques à intercepter :
- NetmikoTimeoutException : L’appareil ne répond pas
- NetmikoAuthenticationException : Échec d’authentification
- NetmikoTimeoutException : Problème de connexion TCP
Implémentez des mécanismes de retry avec Tenacity pour les instabilités réseau passagères.
Frequently asked questions
Netmiko fonctionne-t-il avec les équipements non-Cisco ?
Absolument ! Netmiko supporte plus de 25 fournisseurs dont Arista, HP, Juniper, et Fortinet. Consultez la liste officielle des plates-formes supportées. Pour les appareils exotiques, vous pouvez étendre les classes existantes.
Comment éviter les déconnexions SSH durant les longues opérations ?
Activez le keepalive SSH dans ConnectHandler : ajoutez ‘global_delay_factor’: 2 à vos paramètres. Pour les commandes très longues, utilisez send_command_timing() plutôt que send_command().
Puis-je utiliser Netmiko avec Ansible ?
Oui, Netmiko peut compléter Ansible. Utilisez le module netmiko_send_command dans vos playbooks. Pour les workflows complexes, écrivez des modules Ansible custom en Python exploitant Netmiko.
Quelles alternatives à Netmiko existent ?
Paramiko (plus bas niveau), NAPALM (abstraction multi-vendeur), et Scrapli (haute performance). Netmiko reste la plus accessible pour débuter. Voir notre comparatif détaillé.
Conclusion
La programmabilité réseau avec Python et Netmiko n’est plus un luxe mais une compétence essentielle pour tout administrateur système. Vous maîtrisez désormais les fondamentaux : configuration de l’environnement, création de scripts de sauvegarde automatisée, et sécurisation des accès SSH. Commencez par automatiser une tâche récurrente cette semaine – la sauvegarde de configurations est un excellent point d’entrée. Progressivement, étendez vos compétences vers l’analyse de configurations ou le déploiement massif de changements. Explorez notre formation avancée Python pour réseaux pour transformer radicalement votre efficacité opérationnelle. L’automatisation n’attend pas – votre premier script vous attend !
