====== Netmiko ====== Biblioteca de Python basada en [[http://www.paramiko.org/|Paramiko]] que facilita las conexiones con dispositivos de red. * [[https://github.com/ktbyers/netmiko|Repositorio oficial]] * [[https://ktbyers.github.io/netmiko/|Web oficial]] ===== Instalación ===== pip install netmiko ===== Dispositivos soportados ===== Salvo los genéricos o terminal servers, los demás hacen que Netmiko realice alguna operación tras iniciar sesión correctamente. ^ Sistema ^ device_type ^ | Arista EOS | arista_eos | | Cisco IOS | cisco_ios | | Cisco IOS-XR | cisco_xr | | Cisco NX-OS | cisco_nxos | | Junos | juniper | | | terminal_server | | | generic | La lista completa de ''device_type'' soportados por Netmiko está en los índices del array ''CLASS_MAPPER'' del fichero [[https://github.com/ktbyers/netmiko/blob/master/netmiko/ssh_dispatcher.py|ssh_dispatcher.py]] ===== Uso ===== ==== Ejemplo básico ==== from netmiko import ConnectHandler # Información de conexión device = { 'device_type': 'terminal_server', 'ip': '10.0.65.28', 'username': 'root', 'password': 'abc123.', 'port': 22 } # Conexión net_connect = ConnectHandler(**device) # Ejecución de un comando output = net_connect.send_command("uptime") print() print('#' * 50) print(type(output)) print(output) print('#' * 50) print() # Cerramos la conexión net_connect.disconnect() ==== Ejemplo Cisco ==== Conexión a un router Cisco y ejecución de un comando from netmiko import ConnectHandler # Creamos la conexión SSH sshCli = ConnectHandler( device_type='cisco_ios', host='192.168.56.101', port=22, username='cisco', password='cisco123!' ) # Probamos a ejecutar un comando en el router output = sshCli.send_command("show ip int brief") # Mostramos el resultado print("show ip int brief: \n{}\n".format(output)) ==== Conexión mediante proxy/gateway ==== También se conoce a esto como conexión mediante //jump hosts//, donde la conexión se realiza a un servidor desde el que se realiza otra conexión al dispositivo final. Necesario instalar el módulo ''jumpssh'': ''pip install jumpssh'' from netmiko import ConnectHandler from jumpssh import SSHSession targetnode = { 'device_type': 'alcatel_sros', 'ip': 'targed_node', 'username': 'admin', 'password': 'admin', 'port': 22, } jh_session = SSHSession('jumpserver_ip','jumpserver_user',password='jumpserver_passwd').open() remote_connect = ConnectHandler(**targetnode) output = remote_connect.send_command("show router interface") print(output) ===== Recursos ===== * [[https://pynet.twb-tech.com/blog/automation/netmiko-proxy.html|Netmiko SSH Proxy Support]] * [[https://github.com/ktbyers/netmiko/issues/479|Help to access network device via ssh over jump server from windows script server]] (GitHub) * [[https://pynet.twb-tech.com/blog/automation/netmiko.html|Netmiko Library]]: introducción por el autor del módulo. * [[https://saidvandeklundert.net/2020-01-17-python-screen-scraping-basics/|Screen scraping basics for network engineers]]