Te hemos mostrado cómo usar SSH para transferir archivos de forma segura . Pero hay un gran problema con el comportamiento por defecto de SSH. Sólo se conectará con el equipo remoto después de haber introducido manualmente la contraseña que lo excluye de cualquier tarea que desee ejecutar sin supervisión. ¿O no lo hace?
He aquí un breve resumen de cómo funcionan las herramientas OpenSSH CLI (scp y sftp) de OpenSSH para que pueda apreciar mejor el problema. Cuando desee copiar archivos hacia o desde el host remoto, puede utilizar scp, que inicia automáticamente una conexión SSH con el host remoto. Cada vez que se ejecuta un comando scp se establece una nueva conexión con el control remoto. Así que si tiene múltiples comandos scp, estará ingresando la misma contraseña varias veces.
Esta es la razón por la que no querría usar scp en ningún script que quiera ejecutar sin supervisión. También está el hecho de que si tiene varias cuentas en varios equipos de la red, tendrá problemas para memorizar contraseñas únicas y seguras para cada uno.
Para superar este problema, es necesario cambiar el mecanismo de autenticación predeterminado de OpenSSH a un sistema basado en claves.
La clave del éxito
Por defecto, OpenSSH sólo utiliza claves para autenticar la identidad de un servidor la primera vez que un cliente encuentra una nueva máquina remota:
$ ssh admin@atlantis.remote.com The authenticity of host 'atlantis.remote.com (atlantis.remote.com)' can't be established. ECDSA key fingerprint is da:e8:a2:77:f4:e5:10:56:6d:d4:d2:dc:15:8e:91:22. Are you sure you want to continue connecting (yes/no)?
Cuando responde escribiendo «sí», el host remoto se añade a la lista de hosts conocidos. Así que además de que el servidor autentica al cliente pidiendo una contraseña, el cliente también autentica al servidor usando una clave.
Del mismo modo, usted también puede obtener un conjunto de claves para probar su identidad. OpenSSH utiliza un par de claves para probar su identidad y crear una conexión segura a un servidor remoto. La clave privada es sólo para sus ojos y es utilizada por su cliente OpenSSH para probar su identidad a los servidores. Luego está la clave pública que se supone que debe mantener bajo todas sus cuentas en todas las máquinas remotas en las que desea instalar SSH.
Para crear la key , en tu cliente enter:
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/bodhi/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/bodhi/.ssh/id_rsa. Your public key has been saved in /home/bodhi/.ssh/id_rsa.pub.
Recuerde no dejar la frase de contraseña vacía y tome nota de la ubicación donde están almacenadas las llaves. El archivo «id_rsa» sólo puede ser leído por su cuenta, y su contenido está cifrado con la frase de contraseña que usted proporcionó durante la generación.
El siguiente paso es copiar la clave pública al servidor remoto. Asumiendo que desea iniciar sesión en el usuario «admin» en la máquina remota llamada «atlantis.remote.com», puede mover las teclas con un solo comando:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub admin@atlantis.remote.com admin@atlantis.remote.com's password:
Una vez que haya proporcionado la frase de contraseña para su clave privada, la clave pública se colocará automáticamente en la ubicación correcta en el servidor remoto, que por defecto es el archivo «~/.ssh/authorized_keys».
Cuando ahora ssh en la máquina remota, se le pedirá su frase de contraseña. La única ventaja de usar claves es que en lugar de autenticarte con una contraseña que se transmite sin cifrar, el servidor remoto y tu cliente establecen tu identidad basándose en las claves.
También puede hacer ssh en varias cajas remotas usando la misma frase de contraseña, siempre y cuando estas máquinas remotas tengan su clave pública. Así que no tienes que recordar múltiples contraseñas.
Pero aún así no puedes ejecutar scripts sin que te interrumpan las frases de contraseña.
Relacionado: Cómo habilitar la autenticación de dos factores para la conexión SSH
Agente SSH al rescate
OpenSSH incluye una herramienta llamada ssh-agent, que mantiene sus claves privadas en memoria. Una vez que un agente se está ejecutando, en lugar de pedirle frases de contraseña, los clientes SSH interactuarán con el agente.
Puede iniciar el agente con «ssh-agent /bin/bash», asumiendo que está usando el shell bash.
Cualquier comando que requiera acceso a sus claves privadas OpenSSH será interceptado y respondido por el agente.
Cuando el agente se ejecuta, usted necesita equiparlo con sus llaves. Esto se hace invocando al programa «ssh-add» que por defecto carga las claves desde el archivo de identidad por defecto (~/.ssh/id_rsa).
$ ssh-add Enter passphrase for /home/bodhi/.ssh/id_rsa: Identity added: /home/bodhi/.ssh/id_rsa (/home/bodhi/.ssh/id_rsa)
Ahora, cuando inicie sesión en el ordenador remoto con «ssh admin@atlantis.remote.com», podrá hacerlo sin tener que introducir la frase de contraseña.
Del mismo modo, scp y sftp también podrán conectarse a los hosts remotos sin tener que pedirle nunca una frase de contraseña. Así que ahora puede programar y ejecutar scripts que manipulan archivos en un equipo remoto de forma automática.
Además, ahora que está usando claves, es una buena idea desactivar la autenticación mediante contraseñas. Para ello, edite el fichero de configuración del servidor remoto (/etc/ssh/.sshd_config) y cambie el parámetro «PasswordAuthentication» de «yes» a «no». A partir de ahora, si alguien intenta conectarse a su servicio SSH que no tenga una clave pública en el servidor, se le negará el acceso sin siquiera ver el indicador de inicio de sesión.
Fotografía: Karunakar Rayker