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:
- Ingreses una ruta de archivo para guardar la clave (presiona Enter para aceptar la ruta predeterminada
~/.ssh/id_rsa) - 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 60envía una señal de mantenimiento de conexión cada 60 segundosServerAliveCountMax 3desconecta si el servidor no responde a 3 señales consecutivas- La sección
Host examplecrea un alias para que puedas conectarte conssh exampleen lugar dessh 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:
- Has adquirido una comprensión de SSH y su importancia para las conexiones remotas seguras
- Has generado un par de claves SSH compuesto por una clave privada y una clave pública
- Has aprendido sobre la importancia de los permisos de archivo adecuados para la seguridad de SSH
- Has configurado la autenticación basada en claves SSH configurando el archivo
authorized_keys - 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.



