Dernière modification le 11 janvier 2020
Netmiko est une librairie Python multi-vendeurs pour simplifier l’accès SSH aux équipements à l’aide de la librairie Paramiko.
Netmiko supporte de nombreux constructeurs qui sont classés en trois catégories :
- Regularly Tested
- Limited Testing
- Experimental
Les constructeurs que j’ai pour habitude de mettre en avant dans le domaine NetDevOps : Juniper, Cisco, Cumulus et Arista constituent la quasi totalité de la catégorie « Regularly Tested ». En 2016, j’ai écrit le module Alcatel AOS pour Netmiko, mais dans la mesure où je ne le maintiens plus et où peu de personnes l’utilisent régulièrement, il est passé dans la catégorie « Limited Testing ».
L’installation est très simple : pip3 install netmiko
Exemple d’usage :
#!/usr/bin/env python3 from netmiko import ConnectHandler from netmiko.ssh_exception import NetMikoTimeoutException from netmiko.ssh_exception import NetMikoAuthenticationException from paramiko.ssh_exception import SSHException from colorama import init, Fore # Devices list vqfx01 = { 'device_type': 'juniper', 'ip': 'localhost', 'username' : 'root', 'password' : 'Juniper', 'port' : '2222' } all_vqfx = [ vqfx01 ] # Show command function def show_command(command, search): output = net_connect.send_command(command) print ( '\nCommand: {0}{1} \n' .format( Fore.BLUE, command ) ) for single_line in output.splitlines(): if search in single_line: print (single_line) # Set command function def set_command(command): net_connect.send_command('cli') net_connect.config_mode() net_connect.send_command(command) net_connect.commit(comment='Enabled NETCONF service', and_quit=True) # Main process init(autoreset=True) for a_vqfx in all_vqfx: try: net_connect = ConnectHandler(**a_vqfx) print ( '\n\n{0}{1} Device: {2} port: {3} {4}' .format( Fore.GREEN, '>'*10, a_vqfx['ip'], a_vqfx['port'], '<'*10 ) ) show_command('show configuration', 'netconf') print ( '\n{0}{1} \n' .format( Fore.BLUE, 'Applying netconf configuration' ) ) set_command('set system services netconf ssh') show_command('show configuration', 'netconf') print ('\n') except NetMikoTimeoutException: print ( '\n\n{0}{1} Device: {2} port: {3} {4} {5}' .format( Fore.RED, '>'*10, a_vqfx['ip'], a_vqfx['port'], 'not reachable', '<'*10 ) ) except NetMikoAuthenticationException: print ( '\n\n{0}{1} Device: {2} port: {3} {4} {5}' .format( Fore.RED, '>'*10, a_vqfx['ip'], a_vqfx['port'], 'authentication failure', '<'*10 ) ) except SSHException: print ( '\n\n{0}{1} Device: {2} port: {3} {4} {5}' .format( Fore.RED, '>'*10, a_vqfx['ip'], a_vqfx['port'], 'SSH issue', '<'*10 ) ) else: net_connect.disconnect()