Le mostramos cómo usar SSH para transferir archivos de forma segura. Pero hay un problema importante con el comportamiento predeterminado de SSH. Solo está conectado con la máquina remota después de haber ingresado manualmente la contraseña que descarta cualquier tarea que desee ejecutar sin supervisión. ¿O sí?
He aquí un resumen rápido de cómo el Herramientas CLI de OpenSSH (scp y sftp) trabajo para que pueda apreciar mejor el problema. Cuando desee copiar archivos hacia o desde el host remoto, puede usar scp, que inicia automáticamente una conexión SSH con el host remoto. Cada vez que ejecuta un comando scp, establece una nueva conexión con el control remoto. Entonces, si tiene varios comandos scp, ingresará la misma contraseña varias veces.
Esta es la razón por la que no querría usar scp en ningún script que desee ejecutar sin supervisión. También está el hecho de que si tiene varias cuentas en varias máquinas en la red, tendrá problemas para memorizar contraseñas seguras y únicas para cada una.
Para superar este problema, debe cambiar el mecanismo de autenticación predeterminado de OpenSSH a un sistema basado en claves.
Clave del éxito
Por defecto, OpenSSH solo usa 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 agrega a la lista de hosts conocidos. Entonces, además de que el servidor autentica al cliente al solicitar una contraseña, el cliente también autentica al servidor mediante una clave.
Del mismo modo, usted también puede obtener un juego de llaves para probar su identidad. OpenSSH usa un par de claves para probar su identidad y crear una conexión segura a un servidor remoto. La clave privada es solo para su vista y la utiliza su cliente OpenSSH para demostrar su identidad a los servidores. Luego está la clave pública que se supone que debe mantener en todas sus cuentas en todas las máquinas remotas en las que desea conectarse mediante SSH.
Para crear una clave, en su cliente ingrese:
$ 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 se almacenan las claves. El archivo «id_rsa» solo lo puede leer su cuenta, y su contenido está encriptado con la frase de contraseña que proporcionó durante la generación.
El siguiente paso es copiar la clave pública al servidor remoto. Suponiendo 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 de forma predeterminada es el archivo «~/.ssh/authorized_keys».
Cuando ingrese a la máquina remota, se le solicitará 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 en función de las claves.
Además, ahora puede acceder a varias casillas remotas usando la misma frase de contraseña, siempre que estas máquinas remotas tengan su clave pública. Así que no tienes que recordar varias contraseñas.
Pero aún no puede ejecutar scripts sin ser interrumpido por frases de contraseña.
Agente SSH al rescate
OpenSSH incluye una herramienta llamada ssh-agent, que mantiene sus claves privadas en la memoria. Una vez que se ejecuta un agente, en lugar de solicitarle frases de contraseña, los clientes SSH interactuarán con el agente.
Puede iniciar el agente con «ssh-agent /bin/bash
“, suponiendo que esté utilizando el shell bash.
Cualquier comando que requiera acceso a sus claves privadas de OpenSSH será interceptado y respondido por el agente.
Cuando el agente se ejecuta, debe equiparlo con sus llaves. Esto se hace invocando el programa «ssh-add» que, de forma predeterminada, carga las claves del archivo de identidad predeterminado (~/.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 la computadora remota con «ssh admin@atlantis.remote.com
“, ¡podrás ingresar sin ingresar la frase de contraseña!
Del mismo modo, scp y sftp también podrán conectarse a los hosts remotos sin pedirle una frase de contraseña. Ahora puede programar y ejecutar secuencias de comandos que manipulan archivos en una máquina remota automáticamente.
Además, ahora que está utilizando claves, es una buena idea deshabilitar la autenticación mediante contraseñas. Para hacer esto, edite el archivo de configuración del servidor remoto (/etc/ssh/.sshd_config) y cambie el “PasswordAuthentication
” parámetro de “sí” a “no”. De ahora en adelante, si alguien intenta conectarse a su servicio SSH que no tiene una clave pública en el servidor, se le negará el acceso sin siquiera ver la solicitud de inicio de sesión.
Credito de imagen: Karunakar Rayker