====== 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]]