Cómo configurar Claves SSH en Ubuntu 16.04

Introducción

SSH, o secure shell, es un protocolo cifrado utilizado para administrar y comunicarse con servidores. Al trabajar con un servidor Ubuntu, es probable que pase la mayor parte de su tiempo en una sesión de terminal conectada a su servidor a través de SSH.

En esta guía, nos centraremos en configurar claves SSH para una instalación de Ubuntu 16.04 de vainilla. Las claves SSH proporcionan una forma fácil y segura de iniciar sesión en su servidor y se recomiendan para todos los usuarios.

Paso 1 — Crear el Par de claves RSA

El primer paso es crear un par de claves en la máquina cliente (generalmente en su computadora):

  • ssh-keygen

De forma predeterminada ssh-keygen creará un par de claves RSA de 2048 bits, que es lo suficientemente seguro para la mayoría de los casos de uso (en el indicador -b 4096 para crear una clave de 4096 bits más grande).

Después de ingresar el comando, debería ver la siguiente salida:

Output
Generating public/private rsa key pair.Enter file in which to save the key (/your_home/.ssh/id_rsa):

PresioneENTERpara guardar el par de claves en el subdirectorio.ssh/ en su directorio personal, o especifique una ruta alternativa.

Si ha generado previamente un par de claves SSH, puede ver el siguiente mensaje:

Output
/home/your_home/.ssh/id_rsa already exists.Overwrite (y/n)?

Si elige sobrescribir la clave en el disco, ya no podrá autenticarse usando la clave anterior. Tenga mucho cuidado al seleccionar sí, ya que este es un proceso destructivo que no se puede revertir.

A continuación, debería ver el siguiente mensaje:

Output
Enter passphrase (empty for no passphrase):

Aquí, opcionalmente, puede introducir una contraseña segura, que es muy recomendable. Una frase de contraseña agrega una capa adicional de seguridad para evitar que los usuarios no autorizados inicien sesión. Para obtener más información sobre la 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 la siguiente salida:

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_hostThe key's randomart image is:+------+| ..o || E o= . || o. o || .. || ..S || o o. || =o.+. ||. =++.. ||o=++. |+-----------------+

ahora tiene una clave pública y privada que puede utilizar para autenticar. El siguiente paso es colocar la clave pública en su servidor para que pueda usar la autenticación basada en clave SSH para iniciar sesión.

Paso 2-Copie la Clave Pública a Ubuntu Server

La forma más rápida de copiar su clave pública al host de Ubuntu es usar una utilidad llamada ssh-copy-id. Debido a su simplicidad, este método es muy recomendable si está disponible. Si no tiene ssh-copy-id disponible en su máquina cliente, puede utilizar uno de los dos métodos alternativos proporcionados en esta sección (copiar a través de SSH basado en contraseña o copiar manualmente la clave).

Copiar Clave pública Usando ssh-copy-id

La herramientassh-copy-id se incluye de forma predeterminada en muchos sistemas operativos, por lo que es posible que la tenga disponible en su sistema local. Para que este método funcione, debe tener acceso SSH basado en contraseña a su servidor.

Para usar la utilidad, simplemente debe especificar el host remoto al que desea conectarse y la cuenta de usuario a la que tiene acceso SSH con contraseña. Esta es la cuenta a la que se copiará su clave SSH pública.

La sintaxis es:

  • ssh-copy-id username@remote_host

Usted puede ver el mensaje siguiente:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' 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)? yes

Esto significa que el equipo local no reconoce el host remoto. Esto sucederá la primera vez que se conecte a un nuevo host. Escriba «sí»y presione ENTER para continuar.

A continuación, la utilidad escaneará su cuenta local en busca de la clave id_rsa.pub que creamos anteriormente. Cuando encuentre la clave, le 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 [email protected]'s password:

Escriba la contraseña (su escritura no se muestran por razones de seguridad) y pulse ENTER. La utilidad se conectará a la cuenta en el host remoto utilizando la contraseña que proporcionó. A continuación, copiará el contenido de su clave ~/.ssh/id_rsa.pub en un archivo en el directorio de inicio de la cuenta remota ~/.ssh llamado authorized_keys.

Debería ver la siguiente salida:

Output
Number of key(s) added: 1Now try logging into the machine, with: "ssh '[email protected]'"and check to make sure that only the key(s) you wanted were added.

En este punto, su clave id_rsa.pub se ha cargado en la cuenta remota. Puede continuar con el paso 3.

Copiar la Clave pública Mediante SSH

Si no tiene ssh-copy-id disponible, 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 hacer esto usando el comando cat para leer el contenido de la clave SSH pública en nuestro equipo local y canalizarla a través de una conexión SSH al servidor remoto.

Por otro lado, podemos asegurarnos de que el directorio ~/.ssh existe y tiene los permisos correctos en la cuenta que estamos usando.

Luego podemos generar el contenido que canalizamos en un archivo llamado authorized_keys dentro de este directorio. Usaremos el símbolo de redirección >> para anexar el contenido en lugar de sobrescribirlo. Esto nos permitirá agregar claves sin destruir las claves agregadas previamente.

El comando completo se ve así:

  • cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Puede ver el siguiente mensaje:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' 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)? yes

Esto significa que el equipo local no reconoce el host remoto. Esto sucederá la primera vez que se conecte a un nuevo host. Escriba «sí»y presione ENTER para continuar.

Después, se le debe solicitar que ingrese la contraseña de la cuenta de usuario remoto:

Output
[email protected]'s password:

Después de ingresar su contraseña, el contenido de su clave id_rsa.pub se copiará al final del archivo authorized_keys de la cuenta de usuario remoto. Continúe con el paso 3 si esto tuvo éxito.

Copiar la Clave Pública manualmente

Si no tiene acceso SSH basado en contraseña a su servidor disponible, tendrá que completar el proceso anterior manualmente.

Añadiremos manualmente el contenido de su archivo id_rsa.pub al archivo ~/.ssh/authorized_keys en su máquina remota.

Para mostrar el contenido de su clave id_rsa.pub, escriba esto en su computadora local:

  • cat ~/.ssh/id_rsa.pub

Verá el contenido de la clave, que debería ser algo como esto:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

Acceda a su host remoto utilizando el método que tenga disponible.

Una vez que tenga acceso a su cuenta en el servidor remoto, debe asegurarse de que exista el directorio ~/.ssh. Este comando creará el directorio si es necesario, o no hará nada si ya existe:

  • mkdir -p ~/.ssh

Ahora, 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, utilizando este comando:

  • echo public_key_string >> ~/.ssh/authorized_keys

En el comando anterior, sustituya el public_key_string con la salida del comando cat ~/.ssh/id_rsa.pub que ejecutó en su sistema local. Debe comenzar con ssh-rsa AAAA....

Finalmente, nos aseguraremos de que el directorio ~/.ssh y el archivo authorized_keys tengan los permisos adecuados:

  • chmod -R go= ~/.ssh

Esto elimina recursivamente todos los permisos de «grupo» y «otros» para el directorio ~/.ssh/.

Si está utilizando la cuenta root para configurar claves para una cuenta de usuario, también es importante que el directorio ~/.ssh pertenezca al usuario y no a root:

  • chown -R sammy:sammy ~/.ssh

En este tutorial, nuestro usuario se llama sammy, pero debe sustituir el nombre de usuario apropiado en el comando anterior.

Ahora podemos intentar la autenticación sin contraseña con nuestro servidor Ubuntu.

Paso 3-Autenticarse en Ubuntu Server Usando claves SSH

Si ha completado con éxito uno 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:

  • ssh username@remote_host

Si es la primera vez que se conecta a este host (si utilizó el último método anterior), puede ver algo como esto:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' 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)? yes

Esto significa que el equipo local no reconoce el host remoto. Escriba «sí»y luego presione ENTER para continuar.

Si no proporcionaste una frase de contraseña para tu clave privada, iniciarás sesión inmediatamente. Si proporcionó una frase de contraseña para la clave privada cuando creó la clave, se le pedirá que la ingrese ahora (tenga en cuenta que las pulsaciones de teclas no se mostrarán en la sesión de terminal por seguridad). Después de autenticarse, se abrirá una nueva sesión de shell con la cuenta configurada en el servidor Ubuntu.

Si la autenticación basada en claves se realizó correctamente, continúe para aprender a proteger aún más su sistema deshabilitando la autenticación con contraseña.

Paso 4: Deshabilite la autenticación con contraseña en su servidor

Si pudo iniciar sesión en su cuenta utilizando SSH sin contraseña, ha configurado correctamente la autenticación basada en clave SSH en su cuenta. Sin embargo, el mecanismo de autenticación basado en contraseñas sigue activo, lo que significa que el servidor sigue expuesto a ataques de fuerza bruta.

Antes de completar los pasos de esta sección, asegúrese de que tiene configurada la autenticación basada en clave SSH para la cuenta raíz de este servidor o, preferiblemente, que tiene configurada la autenticación basada en clave SSH para una cuenta no raíz de este servidor con privilegios sudo. Este paso bloqueará los inicios de sesión basados en contraseñas, por lo que es crucial asegurarse de que aún pueda obtener acceso administrativo.

Una vez que haya confirmado que su cuenta remota tiene privilegios administrativos, inicie sesión en su servidor remoto con claves SSH, ya sea como root o con una cuenta con privilegios sudo. A continuación, abra el archivo de configuración del demonio SSH:

  • sudo nano /etc/ssh/sshd_config

Dentro del archivo, busque una directiva llamada PasswordAuthentication. Esto puede ser comentado. Descomente la línea y establezca el valor en «no». Esto deshabilitará su capacidad de iniciar sesión a través de SSH utilizando contraseñas de cuentas:

/etc/ssh/sshd_config
...PasswordAuthentication no...

Guarde y cierre el archivo cuando haya terminado, pulse las teclas CTRLX, luego Y confirmar guardar el archivo, y finalmente ENTER para salir de nano. Para implementar realmente estos cambios, necesitamos reiniciar el servicio sshd:

  • sudo systemctl restart ssh

Como precaución, abra una nueva ventana de terminal y pruebe que el servicio SSH funciona correctamente antes de cerrar esta sesión:

  • ssh username@remote_host

Una vez que haya verificado su servicio SSH, puede cerrar de forma segura todas las sesiones actuales del servidor.

El demonio SSH en su servidor Ubuntu ahora solo responde a claves SSH. La autenticación basada en contraseña se ha desactivado correctamente.

Conclusión

Ahora debe tener configurada la autenticación basada en clave SSH en su servidor, lo que le permite iniciar sesión sin proporcionar una contraseña de cuenta.

Si desea obtener más información sobre cómo trabajar con SSH, eche un vistazo a nuestra Guía SSH Essentials.



Deja una respuesta

Tu dirección de correo electrónico no será publicada.