En este post vamos a ver cómo solucionar un problema (o varios) que me he encontrado cuando he querido actualizar una IOS a un router cisco que tenía en remoto.
Recordad que ya habíamos visto cómo hacer lo mismo a la inversa, es decir, realizar la carga de la IOS desde el router cogiendo la IOS del servidor Linux.
Pero en este caso haremos la carga desde el servidor Linux donde tenemos la IOS hacia el router. En definitiva los comandos los haremos en el servidor Linux.
Esto ¿porque? Bien… el problema que me encuentro es el siguiente…
Desde el servidor Linux donde tengo la IOS llego perfectamente a la IP pública del router. En cambio… desde el router NO llego al servidor Linux, ya que el servidor linux tiene IP privada (hace NAT) y:
1. No sé la IP pública con la que «NATEA» y con la que sale ese servidor a Internet de manera que no puedo llegar de ninguna manera desde el router remoto.
2. Aunque la supiera NO tengo acceso al router donde está conectado el Linux por lo tanto no puedo realizar ningún tipo de “Port Forwarding” para que la conexión SCP entrante me funcione.
Pero vamos paso a paso, porque en el proceso me he ido encontrando varios problemas que quiero que veáis y enseñaros cómo solucionarlos.
El comando que vamos a usar desde Linux para poder hacer la transferencia es:
Donde:
- scp: Corresponde al protocolo de transferencia que vamos a usar.
- c1841-advipservicesk9-mz.151-2.T2.bin: Corresponde a la IOS que queremos transferir.
- aariza: Corresponde al nombre de usuario que tengo para acceder al router
- «IP_Publica_Router»: Corresponde a la IP publica del router.
- flash: Corresponde al directorio del router donde quiero guardar la IOS.
PROBLEMA #1:
Al ejecutar el comando desde Linux obtengo “connection refused”.
ssh: connect to host
lost connection
SOLUCIÓN #1:
Al parecer NO tenemos las claves SSH generadas en el router.
Para ello, accedemos al router y las generamos con el comando “crypto key rsa” con un valor de 512 (presionamos enter cuando nos pregunte). El comando indicado es para CISCO.
The name for the keys will be: Router.alexariza.net.bcn.alexariza.net
Choose the size of the key modulus in the range of 360 to 2048 for your
General Purpose Keys. Choosing a key modulus greater than 512 may take
a few minutes.
How many bits in the modulus [512]:
% Generating 512 bit RSA keys, keys will be non-exportable…[OK]
Ahora vemos si se han generado correctamente con el comando “sh ip ssh”:
SSH Enabled – version 2.0
Authentication timeout: 120 secs; Authentication retries: 3
PROBLEMA #2:
Puede pasar que las hayamos creado con un módulo muy pequeño y el sistema operativo de Linux requiere uno superior por temas de seguridad:
ssh_rsa_verify: RSA modulus too small: 512 < minimum 768 bits
key_verify failed for server_host_key
lost connection
SOLUCIÓN #2:
Le diremos que nos genere unas claves con valor “1024” bits con el comando “crypto key generate rsa general-keys modulus 1024”:
% You already have RSA keys defined named Router.alexariza.net.bcn.alexariza.net.
% They will be replaced.
% The key modulus size is 1024 bits
% Generating 1024 bit RSA keys, keys will be non-exportable…[OK]
PROBLEMA #3:
Es posible que aun así obtengamos el mensaje de error “Administratively disabled” por no tener el servidor scp levantado:
Administratively disabled.
SOLUCIÓN #3:
Debemos activar el servidor scp en el router cisco con “ip scp server enable”:
PROBLEMA #4:
Después de eso es posible que obtengamos el mensaje “Priviledge denied” por tener un usuario demasiado restrictivo:
Privilege denied.
SOLUCIÓN #4:
Eso es porque el usuario que estamos usando NO tiene privilegios suficientes, para ello usaremos el comando username aariza priviledge 15 password «El_password_que_queramos»
Además tenemos que asegurarnos que tenemos estas lineas en el router para confirmar el orden de login:
aaa authorization exec default local none
aaa authentication login default local
PROBLEMA #5:
Nos aparece el mensaje sin espacio en el disco o memoria flash del router:
Error. Not enough space on device
SOLUCIÓN #5:
En este caso tendríamos 2 opciones, o bien usar una IOS mas pequeña. Teniendo en cuenta que sacrificaremos seguramente algunas características de la original.
O bien, podríamos ampliar la memoria flash si el router lo permite, como yo estoy usando un Cisco 1841, justamente llevan memorias flash externas y ampliables. Le he puesto una de 64MB (tenia de serie una de 32MB).
RESULTADO FINAL:
Finalmente he podido realizar mi transferencia, una vez colocado el comando de SCP, y si todo va bien, nos pide el password, lo colocamos y empezará la transferencia:
aariza@ «IP_Publica_Router»‘s password:
c1841-advipservicesk9-mz.151-2.T2.bin 100% 41MB 27.4KB/s 25:51
Connection to
Ahora, vamos al router Cisco y ejecutamos el comando “dir”:
Directory of flash:/
1 -rw- 43433292 Jul 9 2021 09:00:00 +00:00 flash
64012288 bytes total (20578304 bytes free)
Veremos únicamente nuestra IOS ya que al cambiar la tarjeta de memoria, ésta estaba vacía. Vamos a renombrar la IOS con el comando “rename” y cuando nos pregunte por el «Destination filename» simplemente presionamos «Enter»:
Destination filename [c1841-advipservicesk9-mz.151-2.T2.bin]?
Router.alexariza.net#
Miramos de nuevo el nombre con el comando “dir”:
Directory of flash:/
1 -rw- 43433292 Jul 9 2021 09:07:34 +00:00 c1841-advipservicesk9-mz.151-2.T2.bin
64012288 bytes total (20578304 bytes free)
Finalmente colocamos el comando “boot system flash” para que el router arranque con la IOS correcta que acabamos de colocar:
Guardamos los cambios con el comando “wr”:
Building configuration…
Compressed configuration from 6394 bytes to 3515 bytes[OK]
Y hacemos un “reload”:
Ahora si, veremos que nuestro router arranca correctamente con la IOS deseada:
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2010 by Cisco Systems, Inc.
Y para cualquier consulta, ¡no dudéis en contactar!