Uso de la librería Paramiko en redes
Intalamos la librería Paramiko
pip install paramiko
Escenario en GNS3
Configuramos la IP de cada Router
R1#conf t
R1(config)#int g0/0
R1(config-if)#ip add 192.168.1.31 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R2#conf t
R2(config)#int g0/0
R2(config-if)#ip add 192.168.1.30 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exit
Configuramos SSH en cada Router
R1#conf t
R1(config)#hostname R1
R1(config)#ip domain-name cisco.com
R1(config)#crypto key generate rsa modulus 1024
R1(config)#username admin priv 15 secret admin
R1(config)#line vty 0 4
R1(config)#login local
R1(config)#transport input ssh
R1(config)#exit
R2#conf t
R2(config)#hostname R2
R2(config)#ip domain-name cisco.com
R2(config)#crypto key generate rsa modulus 1024
R2(config)#username admin priv 15 secret admin
R2(config)#line vty 0 4
R2(config)#login local
R2(config)#transport input ssh
R2(config)#exit
Librería Paramiko
Usamos paramiko
para conectarnos a los routers vía SSH
y obtener cualquier información de los equipos.
1. R1
import paramiko
# Agregamos la dirección IP y las credenciales SSH
r1_ip = "192.168.1.31"
r1_username = "admin"
r1_password = "admin"
ssh = paramiko.SSHClient()
# Agregamos SSH host key automáticamente si es necesario.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# Conectamos al router usando credenciales.
ssh.connect(r1_ip,
username=r1_username,
password=r1_password,
look_for_keys=False )
# Ejecutamos un comando.
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("dir")
#Obtenemos la salido de nuestro comando.
output = ssh_stdout.read().decode()
print(output)
# Cerramos la conección.
ssh.close()
Ejecutamos el código y obtenemos la siguiente salida:
PS C:\Users\joser\Documents\AUTOMATIZACION CON PYTHON> python .\ssh-cisco-ios.py
Directory of flash0:/
1 drw- 0 Jan 30 2013 00:00:00 +00:00 boot
264 drw- 0 Oct 14 2013 00:00:00 +00:00 config
267 -rw- 143178592 Mar 22 2016 00:00:00 +00:00 vios-adventerprisek9-m
268 -rw- 524288 Feb 3 2022 18:07:22 +00:00 nvram
269 -rw- 79 Feb 3 2022 18:07:26 +00:00 e1000_bia.txt
2142715904 bytes total (1994403840 bytes free)
2. R2
import paramiko
# Agregamos la dirección IP y las credenciales SSH
r2_ip = "192.168.1.30"
r2_username = "admin"
r2_password = "admin"
ssh = paramiko.SSHClient()
# Agregamos SSH host key automáticamente si es necesario.
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# Conectamos al router usando credenciales.
ssh.connect(r1_ip,
username=r2_username,
password=r2_password,
look_for_keys=False )
# Ejecutamos un comando.
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("show ip route")
#Obtenemos la salido de nuestro comando.
output = ssh_stdout.read().decode()
print(output)
# Cerramos la conección.
ssh.close()
Ejecutamos el código y obtenemos la siguiente salida:
PS C:\Users\joser\Documents\AUTOMATIZACION CON PYTHON> python .\ssh-cisco-ios.py
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
a - application route
+ - replicated route, % - next hop override, p - overrides from PfR
Gateway of last resort is 192.168.1.1 to network 0.0.0.0
S* 0.0.0.0/0 [254/0] via 192.168.1.1
192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.1.0/24 is directly connected, GigabitEthernet0/0
L 192.168.1.30/32 is directly connected, GigabitEthernet0/0
Servido