Si estás trabajando de forma remota en servidores Linux (o contenedores), podrías asumir que es inherentemente seguro. Desafortunadamente, esto es un error. Aunque Secure Shell es más seguro que soluciones antiguas como Telnet, aún necesitas tomar medidas adicionales para garantizar la seguridad de tus sistemas y datos.

Por defecto, Secure Shell funciona basándose en un nombre de usuario y contraseña. Entonces, si usas el comando ssh [email protected], se te pedirá la contraseña del usuario «ralph» en el servidor «example.com».

Sin embargo, hay una mejor manera que es menos vulnerable a brechas en el servidor. Se llama autenticación de clave SSH.

La autenticación de clave SSH funciona basándose en un par de claves generadas en tu computadora local. El par de claves consta de una clave privada y una clave pública. La clave privada permanece segura en tu computadora local, mientras que la clave pública se envía al servidor al que deseas acceder de forma remota. Cuando las claves están configuradas, cada vez que inicias sesión en el servidor, se reconocen las claves para verificar si coinciden. Si las claves coinciden, obtienes acceso al servidor. Si las claves no coinciden, estás fuera de suerte.

Esta solución es significativamente más segura que la autenticación tradicional basada en nombre de usuario y contraseña, y debe utilizarse para cualquier servidor Linux que utilices.

Te mostraré cómo implementar la autenticación de clave SSH.

¿Qué necesitarás?

Para realizar esta demostración, necesitarás al menos dos máquinas Linux: una local y una remota. Como todo se hace a través de la línea de comandos, no necesitas configurar un entorno gráfico. Por supuesto, necesitarás la dirección IP o el dominio del servidor remoto, y la máquina local debe tener capacidad de acceso remoto al servidor remoto.

Generar un par de claves SSH

Lo primero que debes hacer es generar tu par de claves SSH. Haz esto en tu computadora local. Inicia sesión en la máquina y crea un par de claves usando el siguiente comando:

ssh-keygen

Se te pedirá dónde guardar la clave (la ubicación predeterminada es ~/.ssh) y deberás ingresar y confirmar una contraseña para el par de claves. Asegúrate de usar una contraseña fuerte y única.

El comando anterior generará dos archivos: id_rsa (la clave privada) e id_rsa.pub (la clave pública).

Copiar la clave a la máquina remota

El siguiente paso es copiar la clave pública a la máquina remota. Afortunadamente, SSH tiene una característica incorporada que facilita esta tarea. Para copiar la clave, simplemente ejecuta el siguiente comando:

ssh-copy-id USUARIO@SERVIDOR

Donde USUARIO es tu nombre de usuario de Linux y SERVIDOR es la dirección IP o el dominio del servidor remoto. Se te pedirá la contraseña de SSH del usuario remoto. Después de una autenticación exitosa, la clave pública se guardará en el directorio ~/.ssh en el servidor remoto.

Luego puedes probar la autenticación de clave SSH iniciando sesión nuevamente en la máquina remota usando el comando:

ssh USUARIO@SERVIDOR

Donde USUARIO es el nombre de usuario y SERVIDOR es la dirección IP o el dominio del servidor remoto. Esta vez, se te pedirá la contraseña de la clave SSH (no la contraseña de tu usuario).

¡Felicitaciones, la autenticación de clave SSH está funcionando!

Pero aún podemos mejorar la seguridad.

Configurar el servidor SSH para aumentar la seguridad

Antes de continuar con este paso, asegúrate de haber creado pares de claves y copiado la clave pública al servidor en todas las máquinas cliente que necesiten acceder al servidor remoto. Si no lo haces, descubrirás que esas máquinas no tendrán la capacidad de iniciar sesión (incluso con cuentas de usuario correctas). La única forma de solucionar este problema sería copiar manualmente el contenido de la clave pública de SSH desde la máquina cliente al archivo ~/.ssh/authorized_keys en el servidor.

Nuestro próximo paso es habilitar la autenticación de clave pública y deshabilitar la autenticación de contraseña (en el servidor remoto).

Abre el archivo de configuración del demonio SSH (en el servidor remoto) usando el siguiente comando:

sudo nano /etc/ssh/sshd_config

Primero, encuentra la línea:

# PubkeyAuthentication yes

Cambia esta línea a:

PubkeyAuthentication yes

Luego, encuentra la línea:

# PasswordAuthentication yes

Cambia esta línea a:

PasswordAuthentication no

Guarda y cierra el archivo.

Reinicia SSH usando el comando:

sudo systemctl restart sshd

Antes de finalizar la conexión actual, abre una nueva ventana de terminal (en la máquina donde copiaste la clave pública al servidor) e intenta iniciar sesión en SSH nuevamente. Si se te concede acceso, has demostrado que la única forma de iniciar sesión a través de SSH es con la autenticación de clave.

Ahora, cualquier intento de iniciar sesión en tu servidor Linux sin pares de claves coincidentes será rechazado.

Preguntas frecuentes

1. ¿Qué soluciones proporcionan seguridad al servidor?
Las soluciones de autenticación de clave SSH.

2. ¿Cómo funciona la autenticación de clave SSH?
La autenticación de clave SSH se basa en un par de claves: privada y pública. La clave privada permanece en la computadora local, mientras que la clave pública se envía al servidor al que deseas acceder. Las claves se autentican durante el inicio de sesión para verificar si coinciden.

3. ¿Por qué la autenticación de clave SSH es más segura que la autenticación tradicional basada en nombre de usuario y contraseña?
La autenticación de clave SSH es más segura porque no requiere ingresar una contraseña durante el inicio de sesión. La clave privada permanece en la computadora local, lo que dificulta que personas no autorizadas la intercepten.

4. ¿Cómo generar un par de claves SSH?
Puedes generar un par de claves SSH en la computadora local utilizando el comando «ssh-keygen».

5. ¿Cómo copiar la clave pública a una máquina remota?
Puedes copiar la clave pública a una máquina remota utilizando el comando «ssh-copy-id USUARIO@SERVIDOR».

6. ¿Cómo configurar el servidor SSH para aumentar la seguridad?
Para aumentar la seguridad del servidor SSH, debes habilitar la autenticación de clave pública y deshabilitar la autenticación de contraseña en el archivo de configuración del demonio SSH.

7. ¿Cómo reiniciar SSH después de realizar cambios en la configuración?
Puedes reiniciar SSH utilizando el comando «sudo systemctl restart sshd».

Definiciones

Secure Shell (SSH) – un protocolo de comunicación seguro para conexiones de red. A menudo se utiliza para iniciar sesión de forma remota en servidores.

Clave Privada – una clave criptográfica secreta que permanece en la computadora local. Se utiliza para desbloquear datos cifrados.

Clave Pública – una clave criptográfica que se envía al servidor al que deseas acceder. Se utiliza en la autenticación de clave SSH.

Autenticación – el proceso de verificar la identidad de un usuario o sistema.

Consola – una interfaz de línea de comandos utilizada para interactuar con un sistema operativo.

The source of the article is from the blog cheap-sound.com