|

SSH por clave pública: elimina la contraseña y refuerza la seguridad de tus conexiones

Conexión SSH mediante certificación por clave RSA: guía paso a paso sin contraseña

Introducción

SSH (Secure Shell) es el protocolo estándar para acceder de forma segura a máquinas remotas a través de una red. Más allá de la autenticación por contraseña, SSH permite configurar una autenticación basada en certificados de clave pública/privada RSA, lo que elimina la necesidad de introducir una contraseña en cada conexión y refuerza la seguridad del acceso.

En esta guía se documenta el proceso completo: configuración de la red entre dos máquinas virtuales en VirtualBox, instalación del servidor SSH, generación del par de claves RSA, copia de la clave pública al servidor y ajuste del archivo de configuración para deshabilitar la autenticación por contraseña.

Requisitos previos

  • Dos máquinas virtuales Linux en VirtualBox (o cualquier hipervisor equivalente).
  • Ambas máquinas con adaptador de red en modo NAT y un segundo adaptador en modo Red interna.
  • Acceso a terminal con privilegios de superusuario (sudo) en ambas máquinas.

Paso 1: Configuración de la red en VirtualBox

Para que las dos máquinas virtuales puedan comunicarse entre sí es necesario configurar dos adaptadores de red en cada una: uno en modo NAT (para acceso a Internet) y otro en modo Red interna (para la comunicación directa entre máquinas).

En este ejemplo se asignan las siguientes direcciones IP en la red interna:

PC1 (servidor):  inet 192.168.1.15  netmask 255.255.255.0  broadcast 192.168.1.255
PC2 (cliente):   inet 192.168.1.20  netmask 255.255.255.0  broadcast 192.168.1.255

Paso 2: Verificación de conectividad entre máquinas (ping)

Una vez configuradas las interfaces de red, se verifica que ambas máquinas se ven entre sí mediante el comando ping. Se realiza la prueba en ambas direcciones: desde PC1 hacia PC2 y desde PC2 hacia PC1.

ping 192.168.1.20   # Desde PC1 hacia PC2
ping 192.168.1.15   # Desde PC2 hacia PC1

Paso 3: Instalación del servidor SSH

En la máquina que actuará como servidor SSH (PC1) se instala el paquete openssh-server con el siguiente comando:

sudo apt install openssh-server

Paso 4: Verificación del estado del servicio SSH

Una vez instalado, se comprueba que el servicio SSH está activo y en ejecución con el siguiente comando:

sudo systemctl status ssh

El servicio debe aparecer con el estado active (running). Si no estuviera activo, se puede iniciar manualmente con sudo systemctl start ssh.

Paso 5: Generación del par de claves RSA en el servidor

Para habilitar la autenticación sin contraseña, se genera un par de claves RSA de 4096 bits en PC1 (servidor) mediante el comando:

ssh-keygen -b 4096 -t rsa

El proceso mostrará una serie de preguntas (ruta de almacenamiento de la clave y passphrase opcional). Se debe presionar Enter en cada pregunta para aceptar los valores por defecto y generar la clave sin passphrase adicional.

El comando genera dos archivos en el directorio ~/.ssh/:

  • id_rsa — clave privada (no debe compartirse nunca).
  • id_rsa.pub — clave pública (es la que se copia al cliente).

Paso 6: Copia de la clave pública al cliente

Una vez generado el par de claves, se copia la clave pública de PC1 a la máquina cliente (PC2) mediante el comando ssh-copy-id:

ssh-copy-id bixi@192.168.1.20

La primera vez que se ejecuta este comando será necesario introducir la contraseña del usuario en PC2. El sistema confirmará que la clave ha sido añadida correctamente al archivo ~/.ssh/authorized_keys del cliente. A partir de ese momento, las conexiones SSH desde PC1 hacia PC2 no requerirán contraseña.

Paso 7: Configuración del archivo sshd_config para mayor seguridad

El último paso consiste en reforzar la seguridad del servidor SSH modificando su archivo de configuración para deshabilitar la autenticación por contraseña y forzar el uso exclusivo de claves. Se accede al archivo con el siguiente comando:

sudo nano /etc/ssh/sshd_config

Dentro del archivo se localizan y modifican los siguientes parámetros:

  • PasswordAuthentication no — desactiva la autenticación por contraseña.
  • PubkeyAuthentication yes — habilita explícitamente la autenticación por clave pública.
  • PermitRootLogin no — impide el acceso directo como usuario root por SSH.

Tras guardar los cambios, es necesario reiniciar el servicio SSH para que la nueva configuración tenga efecto:

sudo systemctl restart ssh

Conclusión y siguientes pasos

Con estos pasos se ha configurado una conexión SSH completamente funcional entre dos máquinas Linux, autenticada exclusivamente mediante certificación por clave RSA y sin necesidad de introducir contraseña. Este método es más seguro que la autenticación por contraseña, ya que elimina el riesgo de ataques de fuerza bruta contra las credenciales.

Como siguientes pasos se recomienda:

  • Cambiar el puerto por defecto (22) del servidor SSH a un puerto no estándar para reducir el ruido de los escáneres automáticos, modificando el parámetro Port en sshd_config.
  • Configurar un cortafuegos (ufw) para permitir únicamente conexiones SSH desde IPs de confianza.
  • Habilitar el registro de conexiones SSH para auditar los accesos al servidor.
  • Explorar el uso de SSH tunneling para redirigir tráfico de red de forma segura a través del canal cifrado.