Proteger tu Servidor con Claves SSH
Proteger tu servidor Linux solo con contraseña ya no es suficiente (son vulnerables a ataques por fuerza bruta, tanto en línea como fuera de línea, además de que históricamente las personas mantienen malas prácticas con las contraseñas). Tienes que asegurarlo con claves SSH.
Este tutorial te enseñará qué son las claves SSH y cómo reemplazar la autenticación por contraseña en Linux por autenticación mediante clave SSH.
Nota: en este tutorial se utiliza un VPS de Contabo, pero esta guía aplica a cualquier servidor virtual de cualquier proveedor. Además, hemos incluido tanto una guía en video paso a paso como un tutorial escrito.
¿Qué Son las Claves SSH?
Claves SSH es la abreviatura de claves de Secure Shell. El investigador en ciberseguridad Tatu Ylönen creó SSH en 1995, y hoy viene incluido en todos los sistemas Unix, Linux y Mac. También está disponible para todas las plataformas, y constituye una parte crítica de toda la infraestructura en la nube.
¿Por Qué Usar Claves SSH en Lugar de Contraseñas?
Un hacker “de verdad” puede descifrar la contraseña de tu servidor antes de que termines de leer esta oración.
(Consejo de seguridad: siempre usa un gestor de contraseñas, como Bitwarden, para mantener tus contraseñas protegidas).
Los atacantes pueden usar ataques de fuerza bruta tradicionales para ingresar a tu servidor, o métodos más sofisticados.
Ahora bien, no estamos aquí para darte una cátedra de higiene digital (para eso ya existen miles de artículos sensacionalistas con fotos de hackers con capucha).
Pero sí queremos enfatizar lo siguiente: las claves SSH son la mejor forma de proteger tu servidor, ya que son mucho más largas y complejas que cualquier contraseña, y además no se envían al servidor.
Eso sí, deberías proteger tu clave SSH con una contraseña adicional (passphrase).
Cómo Generar Claves SSH
SSH utiliza una clave pública y una clave privada pre-generadas (por eso se llama un par de claves SSH).
Estas claves se generan mediante criptografía de clave asimétrica y se guardan para uso futuro.
Como buena práctica, se recomienda generar nuevas claves para cada nuevo dispositivo, ya que es más seguro. Aunque eso implica restablecer las relaciones de confianza.
Cómo se Autentican las Claves SSH
- La clave pública se guarda en tu servidor.
- La clave privada se guarda en tu ordenador local.
Cuando intentas iniciar sesión:
- El servidor genera una cadena aleatoria y la cifra con la clave pública.
- Tu ordenador descifra esa cadena con la clave privada (la única forma posible de hacerlo).
- Envía la cadena descifrada de vuelta al servidor.
- Si coincide con la original, se permite el acceso.
Cómo Generar Claves SSH en Linux
Abre una terminal y escribe el siguiente comando para generar un par de claves (suponiendo que tu ordenador local ejecuta Linux):
ssh-keygen -t rsa
Nota: puede que debas elegir un nombre de archivo y una ruta de guardado según tu versión de Linux.
Ruta predeterminada donde se guardan las claves:
/root/.ssh
id_rsa
es tu clave privadaid_rsa.pub
es tu clave pública
Cómo Generar Claves SSH en Windows
Si tu ordenador local utiliza Windows, se recomienda instalar PuTTY, un emulador de terminal y SSH gratuito y de código abierto (que también incluye PuTTYgen).
Después de instalar PuTTY:
- Abre la barra de búsqueda de Windows y busca “PuTTYgen”.
- Al abrirlo, verás esta pantalla:
Haz clic en “Generate” y mueve el mouse sobre el área en blanco.
Tus claves se generarán:
Cómo Añadir un Comentario a Claves Existentes (Opcional)
Puedes añadir comentarios a una clave SSH escribiendo un espacio después de la clave y agregando el comentario.
Además, según el manual del BSD System Manager, las líneas que comienzan con #
se tratan como comentarios.
Cómo Asignar una Contraseña a la Clave (Opcional, pero Recomendado)
Asignar una contraseña (passphrase) a la clave mejora su seguridad, ya que cifra la clave privada localmente.
Cada vez que te conectes al servidor, tendrás que ingresar esta contraseña, añadiendo una capa extra de protección, similar a una autenticación en dos pasos.
Cómo Subir Claves Públicas SSH a Tu Servidor
Una vez creada la pareja de claves, necesitas subir la clave pública al servidor. Puedes hacerlo por FTP o a través de la consola del servidor.
Subir la Clave Pública vía FTP
- Inicia tu programa FTP y conéctate al servidor como root.
- Crea el siguiente directorio dentro del directorio raíz:
.ssh
- Ahora crea un archivo de texto llamado:
authorized_keys
- Pega dentro de ese archivo toda la clave pública y guarda los cambios.
Subir la Clave Pública vía Consola
- Inicia sesión en tu servidor vía SSH como root.
- Ejecuta este comando para crear el directorio correcto y moverte a él:
mkdir /root/.ssh && cd /root/.ssh
- Crea y abre el archivo
authorized_keys
con:
nano authorized_keys
- Pega toda tu clave pública en el archivo.
- Guarda con
[CTRL + O]
y sal del editor con[CTRL + X]
.
Cómo Usar Tu Clave Privada SSH con PuTTY
Después de generar tu par de claves y subir la pública al servidor, debes cargar la clave privada en PuTTY.
Sigue estos pasos:
Abre PuTTY.
En la sección izquierda, bajo “Category”, haz lo siguiente:
- Haz clic en “Connection” para expandir.
- Haz clic en el [+] junto a “SSH”.
- Selecciona “Auth”.
- En el panel derecho, haz clic en “Browse” para seleccionar tu clave privada.
Luego, vuelve a la parte superior del menú y haz clic en “Session”.
Ingresa la IP de tu servidor y un nombre para el perfil en “Saved Sessions”.
Haz clic en “Save”.
¡Listo! Has creado un perfil en PuTTY que usa tu clave privada.
Cómo Usar Tu Clave Privada SSH con Pageant
Como alternativa a cargar la clave en PuTTY directamente, puedes usar Pageant, un agente SSH que viene con PuTTY.
Ventajas de Pageant:
- Permite usar claves privadas sin necesidad de ingresar la contraseña cada vez.
- Muy útil si has protegido tu clave con passphrase.
Cómo usarlo:
- Busca Pageant en la barra de búsqueda de Windows y ejecútalo.
- Aparecerá como icono en la bandeja del sistema.
- Haz clic derecho sobre el icono y selecciona “Add Key”.
- Se abrirá el explorador de archivos. Selecciona tu clave privada.
- Si tu clave tiene passphrase, deberás ingresarla.
Después de eso, podrás iniciar sesión en tu servidor sin que se te pida ingresar la contraseña cada vez que inicies una sesión SSH.
Nota: cada vez que reinicies tu ordenador, deberás volver a importar la clave en Pageant.
Probar la Autenticación con Claves SSH y Desactivar la Autenticación por Contraseña
Una vez que has generado tu par de claves, has subido la clave pública al servidor y has creado un perfil en PuTTY con tu clave privada, es momento de probar si el nuevo método de acceso funciona.
Probar la Autenticación con Clave SSH
- Abre PuTTY y haz doble clic en el perfil que guardaste.
- Se abrirá una terminal solicitando tu nombre de usuario (normalmente
root
). - Escríbelo y pulsa
[Enter]
.
Si todo está configurado correctamente, se mostrará el siguiente mensaje durante el proceso de inicio de sesión:
Authenticating with public key <comentario de la clave>
Y se iniciará sesión sin necesidad de ingresar una contraseña del servidor.
Desactivar la Autenticación por Contraseña
Si ya puedes iniciar sesión con tu clave SSH, lo lógico es desactivar la autenticación por contraseña, lo cual refuerza la seguridad del servidor.
- Abre el archivo de configuración del servicio SSH:
nano /etc/ssh/sshd_config
- Establece los siguientes valores en
"no"
:
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
💡 Para no buscar manualmente, pulsa
[CTRL + W]
, escribe el nombre del parámetro (por ejemplo:PasswordAuthentication
) y pulsa[Enter]
.
- Si alguna línea está comentada con
#
, elimínalo para que se aplique la configuración. - Guarda los cambios con
[CTRL + O]
y sal con[CTRL + X]
. - Luego reinicia el servicio SSH con:
systemctl restart ssh
Revertir la Autenticación con Clave SSH y Volver a Contraseña
Si deseas volver a usar contraseña para iniciar sesión, simplemente:
- Vuelve a editar el archivo
sshd_config
y cambia estos valores a"yes"
:
ChallengeResponseAuthentication yes
PasswordAuthentication yes
UsePAM yes
- Elimina la carpeta
.ssh
y su contenido con:
rm -R /root/.ssh
- Reinicia el servicio SSH con:
systemctl restart ssh
Con eso, el sistema volverá a aceptar contraseñas para el acceso SSH.