Saltar a contenido

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.

image.png

🔒 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:


  1. Generar clave SSH (equipo local)

Ejecuta el siguiente comando para generar una clave RSA (recomendado usar ed25519 si tu servidor lo soporta):

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_test -N ""
  1. Copiar la clave pública al servidor

Usa ssh-copy-id para copiar automáticamente tu clave pública al servidor:

ssh-copy-id -i ~/.ssh/id_ed25519_test.pub usuario@ip_host_destino

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


  1. Verificar el acceso sin contraseña

Intenta conectarte al servidor:

ssh -i ~/.ssh/id_ed25519_test usuario@ip_host_destino
  1. (Opcional) Deshabilitar el acceso por contraseña

Para mayor seguridad, en el servidor (/etc/ssh/sshd_config), configura:

PasswordAuthentication no
ChallengeResponseAuthentication no

Luego reinicia el servicio SSH:

sudo systemctl restart sshd

Pasos para configurar múltiples claves SSH

1. Genera claves adicionales

Ejecuta ssh-keygen para cada nueva clave, dándoles nombres distintos:

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_servidor1 -C "clave_para_servidor1"
  • -f especifica el nombre del archivo (ejemplo: ~/.ssh/nombre_clave).
  • -C es 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:

ssh-copy-id -i ~/.ssh/id_ed25519_servidor1.pub usuario@servidor1.com

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):

sudo passwd ubuntu

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):

PasswordAuthentication yes 
KbdInteractiveAuthentication yes

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