Configuración de la Autenticación por Clave Pública SSH en Linux

CompTIABeginner
Practicar Ahora

Introducción

En esta práctica de laboratorio, aprenderás a configurar y utilizar la autenticación por clave pública SSH para establecer conexiones seguras con un servidor Linux remoto. Este método refuerza la seguridad y mejora la comodidad al sustituir el tradicional inicio de sesión basado en contraseñas por un par de claves criptográficas. Crearás una clave privada, que se mantiene en secreto en tu equipo local, y una clave pública, que se instala en el servidor para autorizar tu acceso.

El proceso consta de tres etapas principales. En primer lugar, utilizarás el comando ssh-keygen para generar un nuevo par de claves RSA para un usuario de demostración, añadiendo una capa adicional de protección mediante una frase de paso (passphrase). A continuación, transferirás de forma segura la clave pública al archivo de claves autorizadas del servidor remoto utilizando la herramienta ssh-copy-id. Por último, verificarás la configuración iniciando sesión en el servidor a través de SSH, comprobando que ahora se utiliza tu par de claves para la autenticación en lugar de una contraseña convencional.

Esta es una Guía de Laboratorio (Guided Lab) que proporciona instrucciones paso a paso para ayudarte en tu aprendizaje y práctica. Sigue las indicaciones cuidadosamente para completar cada etapa y adquirir experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 97%. Ha recibido una valoración positiva del 100% por parte de los alumnos.

Crear un Usuario de Demostración y Generar un Par de Claves RSA

En este paso, primero crearás una cuenta de usuario dedicada para demostrar la autenticación por clave pública SSH y, posteriormente, generarás un par de claves criptográficas RSA. Este enfoque garantiza un entorno limpio para la demostración sin interferir con las configuraciones de usuarios existentes.

Crear el Usuario de Demostración

Primero, vamos a crear un nuevo usuario llamado sshuser que utilizaremos para nuestra demostración de SSH:

sudo adduser sshuser

El sistema te pedirá que establezcas una contraseña y proporciones información del usuario. Para este laboratorio, utiliza password123 como contraseña. Puedes presionar Enter para omitir los campos opcionales (Nombre completo, número de habitación, etc.).

Adding user `sshuser' ...
Adding new group `sshuser' (1001) ...
Adding new user `sshuser' (1001) with group `sshuser' ...
Creating home directory `/home/sshuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for sshuser
Enter the new value, or press ENTER for the default
 Full Name []:
 Room Number []:
 Work Phone []:
 Home Phone []:
 Other []:
Is the information correct? [Y/n] Y

Generar el Par de Claves RSA

Ahora, cambia a la cuenta sshuser para generar el par de claves. Esto asegura que las claves se creen en el directorio personal del usuario correcto:

sudo su - sshuser

Ya estás operando como sshuser. Genera un par de claves RSA utilizando el comando ssh-keygen. El parámetro -t especifica el tipo de clave a crear, que en este caso es rsa.

ssh-keygen -t rsa

Tras ejecutar el comando, se te preguntará por la ubicación para guardar las claves. La ubicación predeterminada es ~/.ssh/id_rsa, que se encuentra dentro de un directorio oculto llamado .ssh en la carpeta personal del usuario. Presiona Enter para aceptar esta ubicación por defecto.

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

A continuación, se te pedirá que introduzcas una frase de paso (passphrase). Una frase de paso añade una capa extra de seguridad a tu clave privada. Para este laboratorio, utilizaremos sshkey-password como frase de paso. Deberás introducirla dos veces.

Nota: Cuando escribas la frase de paso, no verás ningún carácter en la pantalla. Esta es una medida de seguridad estándar en sistemas Linux.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sshuser/.ssh/id_rsa
Your public key has been saved in /home/sshuser/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:<FINGERPRINT_STRING> sshuser@ubuntu
The key's randomart image is:
+---[RSA 3072]----+
|      .. . .o..  |
|     .  . . o..  |
|      .  . = . . |
|       .  B o .  |
|        S= * .   |
|        o*B o .  |
|       .oO=B . . |
|      .o+*+oE. . |
|      .o*o=o.o.  |
+----[SHA256]-----+

Una vez generadas las claves, puedes verificar que los archivos se crearon correctamente. Utiliza el comando ls -l para listar el contenido del directorio ~/.ssh:

ls -l ~/.ssh

Deberías ver una salida similar a la siguiente, mostrando tus nuevos archivos de claves:

total 8
-rw------- 1 sshuser sshuser 2610 Jun 30 10:30 id_rsa
-rw-r--r-- 1 sshuser sshuser  575 Jun 30 10:30 id_rsa.pub

Presta atención a los permisos de los archivos. La clave privada id_rsa tiene permisos de lectura/escritura solo para el propietario, mientras que la clave pública id_rsa.pub puede ser leída por otros. Es fundamental proteger tu clave privada y nunca compartirla.

Copiar la Clave Pública al Servidor usando ssh-copy-id

En este paso, copiarás la clave pública que generaste anteriormente al servidor SSH. Esta acción autoriza la clave, permitiéndote iniciar sesión utilizando la clave privada correspondiente en lugar de una contraseña. La utilidad ssh-copy-id es un script que simplifica este proceso instalando tu clave en la ubicación correcta del servidor.

Para este laboratorio, simularemos una interacción cliente-servidor en una sola máquina. La cuenta sshuser actuará tanto como cliente como cuenta de destino para la conexión SSH.

Asegúrate de seguir operando con la cuenta sshuser. Si has regresado al usuario labex, vuelve a cambiar:

sudo su - sshuser

Ahora estás listo para copiar la clave pública. El comando ssh-copy-id toma como argumento el usuario remoto y el host. Utilizaremos sshuser@localhost para especificar el usuario sshuser en la máquina local (que actúa como servidor).

Ejecuta el comando:

ssh-copy-id sshuser@localhost

Como es la primera vez que te conectas a localhost vía SSH, se te pedirá que verifiques la autenticidad del host. Escribe yes para continuar:

The authenticity of host 'localhost (::1)' can't be established.
ED25519 key fingerprint is SHA256:<FINGERPRINT_STRING>.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

La herramienta buscará tu clave id_rsa.pub y te pedirá la contraseña de la cuenta sshuser. Introduce la contraseña password123 que configuraste al crear el usuario.

/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
sshuser@localhost's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'sshuser@localhost'"
and check to make sure that only the key(s) you wanted were added.

La salida confirma que se ha añadido una clave con éxito. El comando ssh-copy-id crea automáticamente el directorio ~/.ssh en el servidor si no existe y añade tu clave pública al archivo ~/.ssh/authorized_keys.

Para confirmar esto, puedes ver el contenido del archivo authorized_keys. Debería contener exactamente la misma clave que tu archivo id_rsa.pub.

cat ~/.ssh/authorized_keys

El resultado será una cadena larga de caracteres, que representa tu clave pública.

ssh-rsa AAAA...[long key string]...== sshuser@ubuntu

Probar el Inicio de Sesión SSH con Autenticación por Clave Pública

En este paso final, probarás la nueva configuración para asegurar que la autenticación por clave pública funciona correctamente. Intentarás conectarte al servidor SSH utilizando el par de claves que creaste. En lugar de pedirte la contraseña de usuario, el sistema debería solicitarte la frase de paso que definiste para tu clave privada.

Asegúrate de seguir operando como el usuario sshuser:

whoami

Deberías ver sshuser en la salida. Si no es así, cambia de nuevo a la cuenta sshuser:

sudo su - sshuser

Ahora, iniciemos una conexión SSH a localhost. Como ya te conectaste una vez durante el proceso de copia de la clave, la clave del host ya debería estar aceptada.

Ejecuta el siguiente comando para conectarte:

ssh sshuser@localhost

Se te pedirá que introduzcas la frase de paso de tu clave privada. Esta es la frase que creaste en el Paso 1 (sshkey-password).

Enter passphrase for key '/home/sshuser/.ssh/id_rsa':

Introduce tu frase de paso, sshkey-password, y presiona Enter. Si la has introducido correctamente, accederás al servidor y verás un mensaje de bienvenida.

Welcome to Ubuntu 22.04.x LTS (GNU/Linux x.x.x-xx-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

Last login: Mon Jun 30 10:45:23 2024 from ::1
sshuser@ubuntu:~$

¡Felicidades! Has iniciado sesión correctamente utilizando la autenticación por clave pública. Ahora te encuentras en una nueva sesión SSH. Observa que no se te pidió la contraseña de la cuenta de usuario (password123), sino únicamente la frase de paso de la clave.

Para verificar que estás en una nueva sesión SSH, puedes comprobar el entorno:

echo $SSH_CONNECTION

Esto debería mostrar los detalles de la conexión, confirmando que estás en una sesión SSH activa.

Para cerrar la sesión SSH y volver a tu terminal original, simplemente escribe exit y presiona Enter.

exit

Verás un mensaje confirmando que la conexión se ha cerrado.

logout
Connection to localhost closed.

Finalmente, puedes salir de la cuenta sshuser para volver al usuario labex:

exit

Has configurado y probado con éxito la autenticación por clave pública SSH utilizando un usuario de demostración específico.

Resumen

En este laboratorio, has aprendido a configurar y utilizar la autenticación por clave pública SSH para establecer conexiones seguras y sin contraseña con un servidor Linux remoto. Comenzaste creando un usuario de demostración específico (sshuser) para garantizar un entorno limpio para la configuración. Luego, generaste un nuevo par de claves RSA mediante el comando ssh-keygen. Este proceso creó una clave privada, que permanece protegida por una frase de paso para mayor seguridad, y su correspondiente clave pública.

Posteriormente, utilizaste la herramienta ssh-copy-id para transferir de forma segura la clave pública al archivo de claves autorizadas del servidor. Este comando añadió automáticamente la clave al archivo ~/.ssh/authorized_keys, autorizando el acceso mediante el par de claves. El paso final consistió en probar la conexión iniciando una sesión SSH, la cual se autenticó correctamente utilizando la frase de paso de la clave privada en lugar de la contraseña de la cuenta, confirmando así el correcto funcionamiento de la autenticación por clave pública.