El primer paso para configurar las claves SSH es crear un par de claves en la máquina cliente (generalmente en un ordenador):
$ ssh-keygenPara empezar, ssh-keygen creará un par de claves RSA de 2048 bits, lo que proporcionará la seguridad suficiente para la mayoría de los casos de uso.
Como alternativa, puede usar opcionalmente el parámetro -b 4096 para crear una clave más grande de 4096 bits.
Tras introducir el comando, debería poder ver el siguiente mensaje:
Output Enter file in which to save the key (/your_home/.ssh/id_rsa):Presione Enter para guardar el par de claves en el subdirectorio .ssh/ de su directorio de inicio, o en una ruta alternativa personalizada. Debería aparecer el siguiente mensaje:
Output Enter passphrase ( leave empty for no passphrase):Opcionalmente, puede introducir una contraseña segura, lo cual es muy recomendable. Una contraseña añade una capa adicional de seguridad para evitar que usuarios no autorizados inicien sesión. Para obtener más información sobre seguridad, consulte nuestro tutorial sobre cómo configurar la autenticación basada en claves SSH en un servidor Linux.
A continuación, debería ver el siguiente resultado:Output Your identification has been saved in /your_home/.ssh/id_rsa. Your public key has been saved in /your_home/.ssh/id_rsa.pub. The key fingerprint is: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+Ahora debería tener una clave pública y una privada que puede usar para autenticarse. El siguiente paso es colocar la clave pública en su servidor para poder usar la autenticación basada en claves SSH para iniciar sesión.
La forma más rápida de copiar tu clave pública al host Ubuntu es usar la utilidad `ssh-copy-id`. Este método es altamente recomendable si está disponible. Si no tienes `ssh-copy-id` disponible en tu máquina cliente, puedes usar uno de los dos métodos alternativos que se describen en esta sección (copiar mediante SSH con contraseña o copiar la clave manualmente).
La herramienta ssh-copy-id viene incluida por defecto en muchos sistemas operativos; es posible que la tengas disponible en tu sistema local. Para que funcione, necesitarás acceso SSH a tu servidor mediante contraseña. Para usar esta utilidad, debe especificar el host remoto al que desea conectarse y simplemente agregar la cuenta de usuario a la que tiene acceso SSH mediante contraseña. Esta será la cuenta a la que se copiará su clave SSH pública.
La sintaxis es:
$ ssh-copy-id username@remote_hostEs posible que vea el siguiente mensaje:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yesEsto significa que tu ordenador local no reconoció el host remoto. Lo más probable es que esto ocurra la primera vez que te conectas a un host nuevo. Escribe «sí» y pulsa Intro para continuar.
A continuación, la utilidad buscará en tu cuenta local la clave id_rsa.pub que creamos anteriormente. Cuando la encuentre, te pedirá la contraseña de la cuenta del usuario remoto:
Output /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys username@111.111.11.111's password:Introduzca la contraseña (tenga en cuenta que, por motivos de seguridad, no se mostrará lo que escribe) y pulse Intro. La utilidad se conectará a la cuenta del host remoto utilizando la contraseña que ha proporcionado. A continuación, copiará el contenido de su clave ~/.ssh/id_rsa.pub en un archivo llamado authorized_keys, situado en el directorio ~/.ssh de inicio de la cuenta remota.
Después de eso, debería ver el siguiente resultado:
Output Number of key(s) added: 1 Logging into the machine, with: "ssh 'username@111.111.11.111'" and check to make sure that only the key you wanted was added.En este punto del proceso, su clave id_rsa.pub se ha cargado en la cuenta remota.
Si no dispone del ssh-copy-id, pero tiene acceso SSH basado en contraseña a una cuenta en su servidor, puede cargar sus claves utilizando un método SSH convencional.
Podemos hacerlo usando el comando `cat` para leer el contenido de la clave pública SSH en nuestro ordenador local y enviarlo a través de una conexión SSH al servidor remoto. En el otro extremo, podemos asegurarnos de que el directorio `~/.ssh` existe en la cuenta que estamos usando y luego guardar el contenido enviado en un archivo llamado `authorized_keys` dentro de este directorio.
Utilizaremos el símbolo de redirección >> para añadir el contenido en lugar de sobrescribirlo. Esto nos permitirá agregar claves sin eliminar las claves agregadas previamente.
El comando completo se ve así:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"Es posible que vea el siguiente mensaje:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yesEsto significa que tu ordenador local no reconoce el host remoto. Esto ocurrirá la primera vez que te conectes a un nuevo host. Escribe «sí» y pulsa Intro para continuar.
Posteriormente, se le solicitará que introduzca la contraseña de la cuenta de usuario remota:
Output username@111.111.11.111's password:Tras introducir tu contraseña, el contenido de tu clave id_rsa.pub se copiará al final del archivo authorized_keys de la cuenta del usuario remoto. Si la operación se realizó correctamente, continúa con el paso 3.
Si no dispone de acceso SSH basado en contraseña a su servidor, deberá completar el proceso anterior manualmente.
Agregaremos manualmente el contenido de su archivo id_rsa.pub al archivo ~/.ssh/authorized_keys en su máquina remota.
Para visualizar el contenido de su clave id_rsa.pub, escriba lo siguiente en su ordenador local:
cat ~/.ssh/id_rsa.pubVerás el contenido de la clave, que debería tener un aspecto similar a este:
Output ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle 7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G /12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U /ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@testAcceda a su servidor remoto utilizando el método que tenga disponible.
Una vez que tengas acceso a tu cuenta en el servidor remoto, asegúrate de que exista el directorio ~/.ssh. El comando creará el directorio si es necesario, o no hará nada si ya existe:
mkdir -p ~/.sshAhora, puede crear o modificar el archivo authorized_keys dentro de este directorio. Puede agregar el contenido de su archivo id_rsa.pub al final del archivo authorized_keys, creándolo si es necesario, usando este comando:
En el siguiente comando, sustituya public_key_string por el resultado del comando cat ~/.ssh/id_rsa.pub que ejecutó en su sistema local. Debe comenzar con ssh-rsa AAAA....
echo public_key_string >> ~/.ssh/authorized_keysAhora podemos intentar acceder a nuestro servidor Ubuntu con autenticación sin contraseña.
Si ha completado alguno de los procedimientos anteriores, debería poder iniciar sesión en el host remoto sin la contraseña de la cuenta remota.
El proceso básico es el mismo que la otra vez que lo usamos:
$ ssh username@remote_hostSi es la primera vez que se conecta a este host (si utilizó el método anterior), es posible que vea algo como esto:
Output The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yesSi esto ocurre, significa que tu ordenador local no reconoce el host remoto. Escribe «sí» y pulsa Intro para continuar.
Si no proporcionaste una contraseña para tu clave privada, iniciarás sesión inmediatamente. Si proporcionaste una contraseña al crear la clave, se te pedirá que la ingreses ahora (ten en cuenta que, por seguridad, las teclas que escribas no se mostrarán en la sesión de terminal). Tras autenticarte, se abrirá una nueva sesión de shell con la cuenta configurada en el servidor Ubuntu.
Si la autenticación basada en claves tuvo éxito, continúe para aprender cómo proteger aún más su sistema deshabilitando la autenticación por contraseña.
Si pudiste iniciar sesión en tu cuenta mediante SSH sin contraseña, has configurado correctamente la autenticación basada en clave SSH. Sin embargo, el mecanismo de autenticación basado en contraseña sigue activo, lo que significa que tu servidor aún está expuesto a ataques de fuerza bruta.
Antes de completar los pasos de esta sección, asegúrese de tener configurada la autenticación mediante clave SSH para la cuenta de administrador en este servidor o, preferiblemente, para una cuenta sin privilegios de administrador con privilegios sudo. Este paso bloqueará los inicios de sesión con contraseña, por lo que es fundamental garantizar que aún podrá obtener acceso administrativo.
Una vez que hayas confirmado que tu cuenta remota tiene privilegios administrativos, inicia sesión en tu servidor remoto con claves SSH, ya sea como root o con una cuenta con privilegios sudo. A continuación, abre el archivo de configuración del demonio SSH:
sudo nano /etc/ssh/sshd_configDentro del archivo, busque una directiva llamada PasswordAuthentication. Puede que esté comentada. Descomente la línea y establezca el valor en "no". Esto deshabilitará la posibilidad de iniciar sesión mediante SSH con contraseñas de cuenta.
/etc/ssh/sshd_config ... PasswordAuthentication no ...Cuando hayas terminado, guarda y cierra el archivo pulsando CTRL + X, luego Y para confirmar que se ha guardado y, finalmente, ENTER para salir de nano. Para que estos cambios surtan efecto, es necesario reiniciar el servicio sshd.
$ sudo systemctl restart sshComo medida de precaución, abra una nueva ventana de terminal y compruebe que el servicio SSH funciona correctamente antes de cerrar esta sesión:
$ ssh username@remote_hostUna vez que haya verificado su servicio SSH, puede cerrar de forma segura todas las sesiones de servidor actuales.
El demonio SSH de su servidor Ubuntu ahora solo responde a claves SSH. La autenticación mediante contraseña se ha deshabilitado correctamente.
Una vez completado el tutorial, ya debería tener configurada la autenticación basada en clave SSH en su servidor, lo que le permitirá iniciar sesión sin proporcionar una contraseña de cuenta.