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.