Conexión segura a Linux

LinuxBeginner
Practicar Ahora

Introducción

Secure Shell (SSH) es un protocolo de red criptográfico utilizado para acceder de forma segura a servidores remotos a través de una red no segura. Como profesional en el campo de la informática, entender cómo establecer conexiones seguras a servidores Linux es una habilidad esencial.

En este laboratorio (lab), aprenderás cómo generar pares de claves SSH, administrar tus claves y configurar SSH para una autenticación segura. Este conocimiento es fundamental para administradores de sistemas, desarrolladores y profesionales de ciberseguridad que necesitan acceder y administrar de forma segura sistemas remotos.

Al completar este laboratorio (lab), adquirirás experiencia práctica con SSH, que es el método estándar de la industria para la administración remota segura de servidores Linux y la transferencia segura de archivos.

Comprendiendo los conceptos básicos de SSH

SSH (Secure Shell) es un protocolo que proporciona una forma segura de acceder a computadoras remotas. A diferencia de protocolos más antiguos como Telnet, SSH cifra todas las comunicaciones entre el cliente y el servidor, protegiendo tus datos de la interceptación.

SSH ofrece varias ventajas:

  • Comunicaciones cifradas
  • Métodos de autenticación sólidos
  • Verificación de integridad de datos
  • Transferencias de archivos seguras

Comencemos comprobando si SSH está instalado en tu sistema. Abre tu terminal y ejecuta:

ssh -V

Deberías ver una salida similar a esta, que muestra la versión de SSH instalada:

OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022

Ahora, naveguemos hasta el directorio de nuestro proyecto donde trabajaremos:

cd ~/project

Este comando cambia tu directorio actual a /home/labex/project, que es donde realizaremos todas nuestras operaciones en este laboratorio (lab).

Generando pares de claves SSH

SSH admite varios métodos de autenticación, pero la autenticación basada en claves es la más segura y conveniente. En este paso, generarás un par de claves SSH.

Un par de claves SSH consta de:

  • Una clave privada: Es como tu contraseña secreta y nunca debe ser compartida.
  • Una clave pública: Puede ser compartida de forma segura con los servidores remotos a los que deseas conectarte.

Para generar un nuevo par de claves SSH, utiliza el comando ssh-keygen:

ssh-keygen -t rsa -b 4096

Este comando especifica:

  • -t rsa: Utiliza el algoritmo RSA para la generación de claves
  • -b 4096: Crea una clave de 4096 bits, lo que proporciona una fuerte seguridad

Cuando ejecutes este comando, se te pedirá que:

  1. Ingreses una ruta de archivo para guardar la clave (presiona Enter para aceptar la ruta predeterminada ~/.ssh/id_rsa)
  2. Ingreses una frase de contraseña (puedes dejarla en blanco para este laboratorio (lab) presionando Enter dos veces)

A continuación, un ejemplo de lo que deberías ver:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz1234567890 labex@hostname
The key's randomart image is:
+---[RSA 4096]----+
|                 |
|       . .       |
|      . + .      |
|     . = + .     |
|    . = S = .    |
|   . . = = + .   |
|    . . + = + .  |
|     . . + + .   |
|      .. . .     |
+----[SHA256]-----+

Ahora, examinemos las claves que se generaron. Para ver tu clave pública, utiliza:

cat ~/.ssh/id_rsa.pub

Esto mostrará tu clave pública, que se ve así:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... (long string of characters) ...labex@hostname

Recuerda, la clave pública se puede compartir, pero la clave privada (~/.ssh/id_rsa) debe ser protegida y nunca debe ser compartida con nadie.

Comprendiendo los permisos de las claves SSH

SSH es muy exigente con los permisos de archivos por razones de seguridad. En este paso, aprenderás sobre los permisos correctos para las claves SSH y cómo establecérlos.

Comencemos comprobando los permisos actuales de tus claves SSH:

ls -la ~/.ssh/

Deberías ver una salida similar a esta:

total 16
drwx------ 2 labex labex 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw------- 1 labex labex 3381 Jan 1 12:00 id_rsa
-rw-r--r-- 1 labex labex  741 Jan 1 12:00 id_rsa.pub

Los permisos correctos son:

  • Clave privada (id_rsa): 600 (solo legible y escribible por ti)
  • Clave pública (id_rsa.pub): 644 (legible por todos, escribible solo por ti)
  • Directorio .ssh: 700 (accesible solo por ti)

Si tus permisos son diferentes, puedes establecérlos correctamente con:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

Verifiquemos que los permisos se hayan establecido correctamente:

ls -la ~/.ssh/

La salida ahora debe mostrar los permisos correctos:

total 16
drwx------ 2 labex labex 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw------- 1 labex labex 3381 Jan 1 12:00 id_rsa
-rw-r--r-- 1 labex labex  741 Jan 1 12:00 id_rsa.pub

Estos permisos son críticos para la seguridad: SSH se negará a funcionar si los permisos son demasiado abiertos, ya que esto podría exponer tu clave privada.

Configurando la autenticación SSH

En este paso, aprenderás cómo configurar la autenticación basada en claves SSH. Esto te permite iniciar sesión en servidores remotos sin tener que escribir una contraseña cada vez.

Para que funcione la autenticación por clave SSH, debes copiar tu clave pública al archivo ~/.ssh/authorized_keys del servidor. En un escenario real, utilizarías el comando ssh-copy-id para hacer esto:

## Example for reference (Do not run this)
## ssh-copy-id username@remote_host

Dado que no tenemos un servidor remoto real para este laboratorio (lab), simularemos este proceso creando un archivo local authorized_keys.

Primero, creemos el directorio .ssh si no existe:

mkdir -p ~/.ssh

El comando mkdir -p crea el directorio si no existe y no hace nada si ya existe.

Ahora, creemos o anexemos al archivo authorized_keys:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Este comando anexa tu clave pública al archivo authorized_keys. En un entorno real, este archivo estaría en el servidor remoto.

Verifiquemos el contenido del archivo authorized_keys:

cat ~/.ssh/authorized_keys

Debes ver tu clave pública en la salida, que debería verse similar a:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... (long string of characters) ...labex@hostname

Finalmente, aseguremos que el archivo authorized_keys tenga los permisos correctos:

chmod 600 ~/.ssh/authorized_keys

Esto establece los permisos de lectura y escritura solo para el propietario, lo cual es un requisito de seguridad para el archivo authorized_keys.

Comprendiendo el archivo de configuración SSH

SSH te permite personalizar su comportamiento a través del archivo de configuración de SSH. Esto es especialmente útil cuando te conectas regularmente a múltiples servidores.

Creemos un archivo de configuración de SSH para ver cómo funciona:

nano ~/.ssh/config

Esto abre el editor de texto nano. Agrega el siguiente contenido al archivo:

## Default settings for all hosts
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

## Example server configuration
Host example
    HostName example.com
    User username
    Port 22
    IdentityFile ~/.ssh/id_rsa

En esta configuración:

  • ServerAliveInterval 60 envía una señal de mantenimiento de conexión cada 60 segundos
  • ServerAliveCountMax 3 desconecta si el servidor no responde a 3 señales consecutivas
  • La sección Host example crea un alias para que puedas conectarte con ssh example en lugar de ssh username@example.com -p 22

Para guardar el archivo en nano, presiona Ctrl+O, luego Enter para confirmar y Ctrl+X para salir.

Ahora, establezcamos los permisos correctos para el archivo de configuración:

chmod 600 ~/.ssh/config

Esto asegura que solo tú puedas leer y escribir en este archivo, lo cual es importante para la seguridad.

En un escenario real, ahora podrías conectarte al servidor simplemente escribiendo:

## Example for reference (Do not run this)
## ssh example

En lugar de:

## Example for reference (Do not run this)
## ssh username@example.com -p 22

El archivo de configuración de SSH es una herramienta poderosa que puede ahorrarte tiempo y hacer que la gestión de múltiples conexiones SSH sea mucho más fácil.

Resumen

En este laboratorio (lab), has aprendido los fundamentos de SSH (Secure Shell, Shell Seguro) para conectarte de forma segura a servidores Linux. Aquí está un resumen de lo que has logrado:

  1. Has adquirido una comprensión de SSH y su importancia para las conexiones remotas seguras
  2. Has generado un par de claves SSH compuesto por una clave privada y una clave pública
  3. Has aprendido sobre la importancia de los permisos de archivo adecuados para la seguridad de SSH
  4. Has configurado la autenticación basada en claves SSH configurando el archivo authorized_keys
  5. Has creado un archivo de configuración de SSH para personalizar y simplificar las conexiones SSH

Estas habilidades son esenciales para cualquier persona que trabaje con sistemas Linux, especialmente en roles de computación en la nube, administración de sistemas, DevOps y ciberseguridad. SSH es el método estándar para acceder de forma segura a servidores Linux remotos y es utilizado diariamente por profesionales de TI en todo el mundo.

Con el conocimiento adquirido en este laboratorio, ahora estás capacitado para establecer conexiones seguras a servidores Linux, lo cual es una habilidad fundamental para seguir aprendiendo en administración de sistemas Linux y computación en la nube.