Cómo configurar claves SSH en CentOS 8

Introducción

SSH o shell seguro, es un protocolo cifrado que se usa para administrar y comunicarse con los servidores. Cuando trabajes con un servidor CentOS, es probable que pases la mayor parte de tu tiempo en una sesión de terminal conectada a tu servidor. Seguramente será a través de SSH.

En esta guía, nos centraremos en configurar claves SSH para un servidor CentOS 8. Las claves SSH proporcionan un método directo y seguro para iniciar sesión en tu servidor y se recomiendan para todos los usuarios.

Paso 1 – Creación del par de claves RSA

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

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.  Opcionalmente, puedes usar el indicador -b 4096 para crear una clave más grande de 4096 bits.

Después de ingresar el comando, deberías ver el siguiente mensaje:

Presiona ENTER para guardar el par de claves en el subdirectorio .ssh/ en tu directorio de inicio, o especificas una ruta alternativa.

Si anteriormente habías generado un par de claves SSH, puedes ver el siguiente mensaje:

Si eliges sobrescribir la clave en el disco, ya no podrás autenticarte utilizando la clave anterior. Ten mucho cuidado al seleccionar sí, ya que este es un proceso destructivo que no se puede revertir.

Entonces deberías ver el siguiente mensaje:

Aquí, opcionalmente, puedes ingresar una frase de contraseña segura, que es muy recomendable. Una frase de contraseña agrega una capa adicional de seguridad a tu clave, para evitar que usuarios no autorizados inicien sesión.

Entonces deberías ver el siguiente resultado:

Ahora tienes una clave pública y privada que puedes usar para autenticar. El siguiente paso es obtener la clave pública en tu servidor para que puedas usar la autenticación basada en la clave SSH para iniciar sesión.

Paso 2 – Copiar la clave pública a tu servidor CentOS

La forma más rápida de copiar tu clave pública en el host de CentOS es usar una utilidad llamada ssh-copy-id. Este método es muy 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 mostraré. Por ejemplo, copia mediante SSH basado en contraseña o copia manual de la clave.

Copiar tu clave pública usando ssh-copy-id

La herramienta ssh-copy-id se incluye de manera predeterminada en muchos sistemas operativos, por lo que puedes tenerla disponible en tu sistema local. Para que este método funcione, ya debes tener acceso SSH basado en contraseña a tu servidor.

Para usar la utilidad, solo necesitas especificar el host remoto al que deseas conectarte y la cuenta de usuario a la que tiene acceso SSH con contraseña. Esta es la cuenta en la que se copiará tu clave SSH pública:

Puedes ver el siguiente mensaje:

Esto significa que tu computadora local no reconoce el host remoto. Esto sucederá la primera vez que te conectes a un nuevo host. Escribe yes y presiona ENTER para continuar.

A continuación, la utilidad buscará en tu cuenta local la clave id_rsa.pub que creamos anteriormente. Cuando encuentre la clave, te pedirá la contraseña de la cuenta del usuario remoto:

Escribe la contraseña (tu escritura no se mostrará por motivos de seguridad) y presiona ENTER. La utilidad se conectará a la cuenta en el host remoto utilizando la contraseña que proporcionaste. Luego copiará el contenido de tu clave ~/.ssh/id_rsa.pub en el archivo ~/.ssh/authorized_keys de la cuenta remota.

Deberías ver el siguiente resultado:

En este punto, tu clave id_rsa.pub se ha cargado en la cuenta remota. Puedes continuar con el Paso 3.

Copiar clave pública utilizando SSH

Si no tienes disponible ssh-copy-id, pero tienes acceso SSH basado en contraseña a una cuenta en tu servidor, puedes cargar tus claves utilizando un método SSH más convencional.

Podemos hacer esto usando el comando cat para leer el contenido de la clave pública SSH en nuestra computadora local. Posteriormente debes canalizarlo a través de una conexión SSH al servidor remoto.

Por otro lado, podemos asegurarnos de que el directorio ~/.ssh exista y tenga 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 redireccionamiento >> para agregar el contenido en lugar de sobrescribirlo. Esto nos permitirá agregar claves sin destruir ninguna clave agregada previamente.

El comando completo se ve así:

Puede ver el siguiente mensaje:

Esto significa que tu computadora local no reconoce el host remoto. Esto sucederá la primera vez que te conectes a un nuevo host. Escribe yes y presiona ENTER para continuar.

Luego, se te pedirá que ingreses la contraseña de la cuenta de usuario remoto:

Después de ingresar 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. Continúa con el Paso 3 si esto fue exitoso.

Copiar clave pública manualmente

Si no tienes acceso SSH basado en contraseña a tu servidor disponible, deberás completar el proceso anterior manualmente.

Agregaremos manualmente el contenido de tu archivo id_rsa.pub al archivo ~/.ssh/authorized_keys en tu máquina remota.

Para mostrar el contenido de tu clave id_rsa.pub, escribe esto en tu computadora local:

Verás el contenido de la clave, que debería verse así:

Inicia sesión en tu host remoto utilizando cualquier método que tengas disponible.

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

Ahora, puedes crear o modificar el archivo authorized_keys dentro de este directorio. Puedes agregar el contenido de tu archivo id_rsa.pub al final del archivo authorized_keys, creándolo si es necesario, usando este comando:

En el comando anterior, debes sustituir public_key_string con la salida del comando cat ~/.ssh/id_rsa.pub que ejecutaste en tu sistema local. Debería comenzar con ssh-rsa AAAA….

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

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

Si estás 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:

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

Ahora podemos intentar la autenticación basada en claves con nuestro servidor CentOS.

Paso 3 – Iniciar sesión en tu servidor CentOS utilizando claves SSH

Si haz completado con éxito uno de los procedimientos anteriores, deberías poder iniciar sesión en el host remoto sin la contraseña de la cuenta remota.

El proceso inicial es el mismo que con la autenticación basada en contraseña:

Si es la primera vez que te conectas a este host (si utilizaste el último método anterior), puedes ver algo como esto:

Esto significa que tu computadora local no reconoce el host remoto. Escriba yes y luego presiona ENTER para continuar.

Si no proporcionaste una frase de contraseña al crear tu par de claves en el paso 1, iniciarás sesión de inmediato. Si proporcionaste una frase de contraseña, se te pedirá que la ingreses ahora. Después de la autenticación, se abrirá una nueva sesión de shell con la cuenta configurada en el servidor CentOS.

Si la autenticación fue exitosa, continúa para aprender cómo proteger aún más tu sistema deshabilitando la autenticación basada en contraseña de tu servidor SSH.

Paso 4 – Deshabilitar la autenticación de contraseña en tu servidor

Si pudiste iniciar sesión en tu cuenta utilizando SSH sin contraseña, has configurado correctamente la autenticación basada en la clave SSH en tu cuenta. Empero, tu mecanismo de autenticación basado en contraseña todavía está 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úrate de tener configurada la autenticación basada en la clave SSH para la cuenta root en este servidor. También, preferiblemente, tener configurada la autenticación basada en la clave SSH para una cuenta no root en este Servidor con privilegios sudo.

Este paso bloqueará los inicios de sesión basados ​​en contraseña, por lo que es crucial asegurarte de que aún podrás 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. Puedes iniciar sesión como root o con una cuenta con privilegios sudo. Luego, abre el archivo de configuración del demonio SSH:

Dentro del archivo, debes buscar una directiva llamada PasswordAuthentication. Esto se puede comentar con un hash #.

Debes presionar i para poner vi en modo de inserción y luego elimina el comentario de la línea y establecer el valor en no. Esto deshabilitará tu capacidad de iniciar sesión a través de SSH usando contraseñas de cuenta:

Cuando termines de hacer cambios, presiona ESC y luego :wq para escribir los cambios en el archivo y salir. Para implementar realmente estos cambios, necesitamos reiniciar el servicio sshd:

Verificación

Como precaución, debes abrir una nueva ventana de la terminal y comprobar que el servicio SSH funciona correctamente antes de cerrar tu sesión actual:

Una vez que hayas verificado que tu servicio SSH todavía funciona correctamente, puedes cerrar de forma segura todas las sesiones actuales del servidor.

El demonio SSH en tu servidor CentOS ahora solo responde a las claves SSH. La autenticación basada en contraseña se ha deshabilitado correctamente.

Conclusión

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