Cisco IOS – Gestión Automatizada con ssh y PKI

El el post anterior ya adelantamos la ventaja de usar ssh con PKI en dispostivos Cisco con IOS versión 15:

La gestión automatizada.

Veremos un ejemplo de acceso ssh sin contraseña a dispostivos Cisco para lanzarles comandos y configuraciones. Usando este método, configuraremos de golpe una community snmp, una access-list y obtendremos el Serial Number dos switches.

  • Escenario:

Una servidor linux de gestión que tiene la clave privada de nuestra PKI.
Dos switches Cisco con IOS v15 ya configurados como en el post anterior:
swich-1 = 192.168.5.2
switch-2 = 192.168.5.9

1. Copiamos la clave privada

en formato OpenSSH que creamos en el anterior post a nuestro servidor linux. Recordemos que se trata del fichero pki-capa3-private-openssh.ppk

Como esta clave privada sólo tiene el propósito de publicar el post, la comparto pues no hay riesgo:

-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAiJEBmYYFAWlxJaA6bkeUtMf/D99+XKKWNfrPtvXCzpWfjXHG
f6cejJR0hcoEAigdaC5ZG+ahKtz9v3uFgupljb8KaM2cdRpm37Q4Wc8jPBj9W0Nq
bPHL8fdDg5Va58g78/vJftJd+wwB3QwrtjJ6U1AlygEd1+d3QN46rUYbUwSU8tm7
k3lnrSATTZ3tiXaueZKrj8fvykPmPLsHFZr3SO7HMDSWscsW4f4aBEGeMdnFywoH
SvFYQZXE3v1PbeQSy+01XhQrkZODyXY/fZf19wxvqM9sCTaG0pm1vINZOWD2G0JI
vZ8IZD0xZe5p03DEboar65P9NQiQGwi4bOR/vQIBJQKCAQBCcA6dttIAr9Yt+uv+
TFYubyIjZc7FSC1mXlc2abi3hw9ZkUvPZg7cmz+bCFT6IVpqCLW6i9+z/M541E7K
ESp8TxnSHtZ+KIUS4g2TeYbDSm1qqyzbDdjWk/dUxTMkppm09wgULv1JstB5X93p
7wsTxiA4wkXep/TTcwfJ6sEvTZvDV4ha1ICVIqccCzOw1Rp/1oc6zFLGN4Sd4W4/
J6p+B8Q+U6CmMqAvmuX+ZoCbyE8HdTV4EiY4/bbeGJetzQDfdpzFbNk4v3w1ICzc
4fC8gpyPtrlQBi2lkm7xW47s0a2a29ERtgriegwVFxatm0CyUg+NwDhvSLWvQXfz
GiEtAoGBAOoVASgbbalm6dcrYfxCPMYufcPfuEQfLw90DaVLzGeYlKMwo08v786/
w17XgCKHd3C5wB2HyHoZ5EDErWhWXXXiFaTugXtfB0r5zz7yP2gIz1L9ZD07PbE5
VKrgopXTYFfw79iFMcvox9iRpUWdWFsocb6TnZLQMLS6eHZVCiQtAoGBAJVaiDQS
rEQwGau97AcGZ2q2FNG3Msih25uEJRudUlvmLbtGkAuBj6mHfFQwCzpqKiRlg6aF
PHMkUqinHVn5YTeQR04vFn/okNXwq/mo3XRqvtrZVyOpeltTJkNBFlZ/NSsWqwmU
BUKNenjh0pIKIGRJT81fQKEOUJ7NpiDdCDPRAoGAJfWRfCAfnu4YFQ30Nr6iEky6
cspVO3qtr3qabdTwttp4995fq/nviU+HdyndbWITXmNPlhYE1YeoeTSmf59NbQ/n
1Y513KegUVjxLM1WY+XAwVmF4Gp4tPSKRTkvHzcItFCVmLunNdK4n6jqXlDd5UTU
LL394HTJoMRK4sGunhUCgYEAiT5vUnIGFSVIBZnEIiGPdtDU3GMnv0igSbezZXvP
JAPyrBdT7uXCSMGwhLaG27uAq9LnrcaKk1HPaou6G1Pcy0ZPXJn4/+p3QSJY15RB
Ht6hitWOWB8yKmgVUo7WQaVTc7P3HY7wE6SaDjdL4CT7K7j9OULFxG4E5PRTeCUO
dM0CgYEA012cRapD0pDBj6EuqfHt1qHHHeW3/FVn6KtdK9jy7UcLiFhDHN+1Efsd
arRR5PPO/7hfWVr1vI3Ra63SRkFciQ9UN6IkTjLKPk1qM1lUSSkr3HxWrtD/KWAI
F+sAwyBiS6CgJ0UnoAo0/z9fhn/Wzr2S8fqnd9fm8q0xt9YYirk=
-----END RSA PRIVATE KEY-----

Vamos a copiarla al fichero id_rsa del directorio /home/xavi/.ssh y le daremos los permisos adecuados.

Entramos en el directorio de nuestro usuario:
xavi@management:~$cd /home/xavi

Creamos el directorio .ssh
xavi@management:~$ mkdir .ssh

Le damos los permisos al directorio
xavi@management:~$ chmod -R 700 .ssh/

Entramos en el directorio .ssh
xavi@management:~$ cd .ssh/

Hacemos un copiar y pegar directamente en el terminal de nuestra clave privada sobre el fichero id_rsa:

 cat > /home/xavi/.ssh/id_rsa <<EOF
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAiJEBmYYFAWlxJaA6bkeUtMf/D99+XKKWNfrPtvXCzpWfjXHG
f6cejJR0hcoEAigdaC5ZG+ahKtz9v3uFgupljb8KaM2cdRpm37Q4Wc8jPBj9W0Nq
bPHL8fdDg5Va58g78/vJftJd+wwB3QwrtjJ6U1AlygEd1+d3QN46rUYbUwSU8tm7
k3lnrSATTZ3tiXaueZKrj8fvykPmPLsHFZr3SO7HMDSWscsW4f4aBEGeMdnFywoH
SvFYQZXE3v1PbeQSy+01XhQrkZODyXY/fZf19wxvqM9sCTaG0pm1vINZOWD2G0JI
vZ8IZD0xZe5p03DEboar65P9NQiQGwi4bOR/vQIBJQKCAQBCcA6dttIAr9Yt+uv+
TFYubyIjZc7FSC1mXlc2abi3hw9ZkUvPZg7cmz+bCFT6IVpqCLW6i9+z/M541E7K
ESp8TxnSHtZ+KIUS4g2TeYbDSm1qqyzbDdjWk/dUxTMkppm09wgULv1JstB5X93p
7wsTxiA4wkXep/TTcwfJ6sEvTZvDV4ha1ICVIqccCzOw1Rp/1oc6zFLGN4Sd4W4/
J6p+B8Q+U6CmMqAvmuX+ZoCbyE8HdTV4EiY4/bbeGJetzQDfdpzFbNk4v3w1ICzc
4fC8gpyPtrlQBi2lkm7xW47s0a2a29ERtgriegwVFxatm0CyUg+NwDhvSLWvQXfz
GiEtAoGBAOoVASgbbalm6dcrYfxCPMYufcPfuEQfLw90DaVLzGeYlKMwo08v786/
w17XgCKHd3C5wB2HyHoZ5EDErWhWXXXiFaTugXtfB0r5zz7yP2gIz1L9ZD07PbE5
VKrgopXTYFfw79iFMcvox9iRpUWdWFsocb6TnZLQMLS6eHZVCiQtAoGBAJVaiDQS
rEQwGau97AcGZ2q2FNG3Msih25uEJRudUlvmLbtGkAuBj6mHfFQwCzpqKiRlg6aF
PHMkUqinHVn5YTeQR04vFn/okNXwq/mo3XRqvtrZVyOpeltTJkNBFlZ/NSsWqwmU
BUKNenjh0pIKIGRJT81fQKEOUJ7NpiDdCDPRAoGAJfWRfCAfnu4YFQ30Nr6iEky6
cspVO3qtr3qabdTwttp4995fq/nviU+HdyndbWITXmNPlhYE1YeoeTSmf59NbQ/n
1Y513KegUVjxLM1WY+XAwVmF4Gp4tPSKRTkvHzcItFCVmLunNdK4n6jqXlDd5UTU
LL394HTJoMRK4sGunhUCgYEAiT5vUnIGFSVIBZnEIiGPdtDU3GMnv0igSbezZXvP
JAPyrBdT7uXCSMGwhLaG27uAq9LnrcaKk1HPaou6G1Pcy0ZPXJn4/+p3QSJY15RB
Ht6hitWOWB8yKmgVUo7WQaVTc7P3HY7wE6SaDjdL4CT7K7j9OULFxG4E5PRTeCUO
dM0CgYEA012cRapD0pDBj6EuqfHt1qHHHeW3/FVn6KtdK9jy7UcLiFhDHN+1Efsd
arRR5PPO/7hfWVr1vI3Ra63SRkFciQ9UN6IkTjLKPk1qM1lUSSkr3HxWrtD/KWAI
F+sAwyBiS6CgJ0UnoAo0/z9fhn/Wzr2S8fqnd9fm8q0xt9YYirk=
-----END RSA PRIVATE KEY-----
EOF

Le damos los permisos adecuados al fichero id_rsa:

xavi@management:~/.ssh$ chmod 600 id_rsa 

2. Probamos el acceso ssh sin contraseña.

Recordemos que el usuario creado en el post anterior y asociado a esa clave privada era “xavi” Como estamos usando el usuario xavi también en nuestro servidor linux no especificamos usuario en la conexión ssh, lo asume. Nos sale una alarma de que es la primera vez que accedemos desde nuestro linux al host. Es normal, no volverá a salir.

xavi@management:~/.ssh$ ssh 192.168.5.2
The authenticity of host '192.168.5.2 (192.168.5.2)' can't be established.
RSA key fingerprint is ba:79:ed:56:c2:9a:63:1b:bf:b5:e4:c0:ce:58:ce:b4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.5.2' (RSA) to the list of known hosts.
switch-1#
switch-1#exit
Connection to 192.168.5.2 closed by remote host.
Connection to 192.168.5.2 closed.
xavi@management:~/.ssh$

3. Lanzamos nuestro primer comando remotamente a un switch

Repetimos la conexión ssh al mismo switch, pero esta vez le lanzamos desde nuestro servidor linux el comando “show version | i uptime”:

xavi@management:~/.ssh$ ssh 192.168.5.2 'show version | include uptime'
switch-1 uptime is 7 weeks, 3 days, 22 hours, 22 minutes
xavi@management:~/.ssh$

4. Creamos un fichero que contiene las ip’s de los switches en /home/xavi/switches

Copiamos y pegamos en el terminal de nuestro linux:

xavi@management:~$ cat > /home/xavi/switches.txt <<EOF
192.168.5.2
192.168.5.9
EOF
#

5 Creamos otro fichero que contendrá una configuración de snmp con access-list en /home/xavi/config

Copiamos y pegamos en el terminal de nuestro linux:

xavi@management:~$ cat > /home/xavi/config.txt <<EOF
conf t
access-list 60 permit 192.168.5.0 0.0.0.255
snmp-server community capa3.es-prueba RO 60
exit
show run | i capa3
exit
EOF
#

6. Lanzamos el script que copiará la configuración en los dos switches:

Volvemos al home del usuario:

xavi@management:~/.ssh$ cd /home/xavi

Lanzamos el script:

xavi@management:~$ for i in `cat switches.txt`; do cat config.txt | ssh -T -q "$i";done

Lo que vemos en pantalla es como se va conectando por ssh y va configurando los switches:

switch-1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
switch-1(config)#access-list 60 permit 192.168.5.0 0.0.0.255
switch-1(config)#snmp-server community capa3.es-prueba RO 60
switch-1(config)#exit
switch-1#show run | i capa3
ip domain-name capa3.es
snmp-server community capa3.es-prueba RO 60
switch-1#exit
switch-2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
switch-2(config)#access-list 60 permit 192.168.5.0 0.0.0.255
switch-2(config)#snmp-server community capa3.es-prueba RO 60
switch-2(config)#exit
switch-2#show run | i capa3
ip domain-name capa3.es
snmp-server community capa3.es-prueba RO 60
switch-2#exit
Connection to 192.168.5.9 closed by remote host.
xavi@managmenent:~$

7. Lanzaremos un script que se conectará a los dos switches y nos dirá que vlan se llama FTTH en los switches.

Esto es, la salida del comando “show vlan | include FTTH”

for i in `cat switches.txt`; do echo 'show vlan | i FTTH' | ssh -T -q "$i";done

Lo que vemos en pantalla es:

switch-1#show vlan | i FTTH
6    FTTH                             active    
switch-1#Connection to 192.168.5.2 closed by remote host.

switch-2#show vlan | i FTTH
6    FTTH                             active

8. El script para obtener los Serial Numbers sería tan sencillo como el otro:

for i in `cat switches.txt`; do echo 'show ver | i  serial' | ssh -T -q "$i";done

Y obtenemos:

switch-1#show ver | i  serial
Motherboard serial number       : FOCXXXXXXXX
Power supply serial number      : DCA1XXXXXXX
System serial number            : FOC1XXXXXXX
switch-1#
switch-2#show ver | i  serial
Motherboard serial number       : FOC1YYYYYYY
Power supply serial number      : DCA1YYYYYYY
System serial number            : FOC1YYYYYYY

 

Con estos ejemplos, ya se pueden crear crons en nuestro linux para realizar tareas desatendidas y programadas sobre los dispositivos Cisco con IOS versión 15.
también podráimos hacer que al finalizar nos envíe el resultado por correo … Vamos, la gestión automatizada que se lleva haciendo con linux, unix, etc desde hace años … pero con Cisco.

Leave a Reply

Your email address will not be published. Required fields are marked *