Secure Shell (SSH)¶
SSH (Secure Shell) es un protocolo de red criptográfico diseñado para permitir el acceso, la administración y el intercambio de datos con un servidor remoto de manera completamente segura. Opera por defecto en el puerto 22 bajo el modelo cliente-servidor.
A diferencia de sus predecesores obsoletos e inseguros (como Telnet o Rsh), SSH cifra todo el tráfico de datos (incluyendo contraseñas y comandos ejecutados), evitando que atacantes en la misma red intercepten la sesión mediante técnicas de sniffing.
¶
🔒 Mecanismos de Autenticación¶
SSH ofrece dos métodos principales para validar la identidad del usuario:
- Autenticación por Contraseña: El método tradicional. Es vulnerable a ataques de fuerza bruta si la contraseña es débil.
- Autenticación por Claves Asimétricas (Recomendado): Utiliza un par de llaves criptográficas (una clave pública en el servidor y una clave privada en tu máquina local). Es el estándar de la industria porque elimina la posibilidad de hackeo por fuerza bruta.
⚙️ Comandos Esenciales¶
La interacción con SSH se realiza directamente desde la terminal del sistema operativo:
- Conexión básica:
ssh usuario@ip_del_servidor - Conexión por puerto personalizado:
ssh -p 2222 usuario@ip_del_servidor - Generar un par de claves seguras (Ed25519):
ssh-keygen -t ed25519 -C "tu_correo@ejemplo.com" - Copiar tu clave pública al servidor remoto:
ssh-copy-id usuario@ip_del_servidor
Para crear un par de claves SSH y configurar tu servidor para permitir el acceso sin contraseña, sigue estos pasos:
- Generar clave SSH (equipo local)
Ejecuta el siguiente comando para generar una clave RSA (recomendado usar ed25519 si tu servidor lo soporta):
- Copiar la clave pública al servidor
Usa ssh-copy-id para copiar automáticamente tu clave pública al servidor:
Si ssh-copy-id no está disponible, puedes hacerlo manualmente. Copia el contenido de la clave pública sobre el directorio
<span class="s1">$HOME/.ssh/authorized_keys</span> del host de destino
- Verificar el acceso sin contraseña
Intenta conectarte al servidor:
- (Opcional) Deshabilitar el acceso por contraseña
Para mayor seguridad, en el servidor (/etc/ssh/sshd_config), configura:
Luego reinicia el servicio SSH:
Pasos para configurar múltiples claves SSH¶
1. Genera claves adicionales
Ejecuta ssh-keygen para cada nueva clave, dándoles nombres distintos:
-fespecifica el nombre del archivo (ejemplo:~/.ssh/nombre_clave).-Ces un comentario (opcional, pero útil para identificar la clave).
2. Copia las claves públicas a los servidores
Usa ssh-copy-id con la opción -i para especificar la clave pública:
Si no tienes ssh-copy-id, copia manualmente el contenido de .pub al ~/.ssh/authorized_keys del servidor.
3. Configura ~/.ssh/config para usar claves específicas
Crea o edita el archivo ~/.ssh/config para asignar claves a cada servidor:
Ejemplo de configuración:
# Conexión al Servidor 1
Host servidor1 # (Alias para el comando SSH, ej: `ssh servidor1`)
HostName 192.168.1.100 # IP del servidor
User usuario1 # Usuario remoto
IdentityFile ~/.ssh/id_ed25519_servidor1 # Clave privada asignada
# Conexión al Servidor 2 usando IP y puerto personalizado
Host servidor2
HostName 203.0.113.45 # IP pública del servidor
User admin
Port 2222 # Si el servidor usa un puerto distinto al 22
IdentityFile ~/.ssh/id_rsa_servidor2
Host: Un alias para el servidor (ejemplo:ssh servidor1).HostName: La IP o dominio real del servidor.User: El usuario remoto.IdentityFile: La clave privada que debe usarse.
Habilitar SSH con contraseña¶
Normalmente el usuario es ubuntu (o el que hayas definido en cloud-init):
Si no estableces contraseña, SSH por password no funcionará aunque lo habilites.
Abre el archivo: /etc/ssh/sshd_config
Verifica o ajusta estas líneas (sin # delante):
Mediante comandos:
sudo sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication yes/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?KbdInteractiveAuthentication .*/KbdInteractiveAuthentication yes/' /etc/ssh/sshd_config
sudo systemctl restart ssh