¿Qué es SSH y Cómo Conectarse a un Servidor Remoto de Forma Segura?
Domina el protocolo SSH: cómo funciona la autenticación por claves asimétricas (Ed25519 vs RSA), cómo conectarse mediante el cliente de terminal, transferir archivos con SCP/SFTP y endurecer la seguridad del servidor.
SSH (Secure Shell) es un protocolo de red criptográfico y un conjunto de herramientas diseñado para iniciar sesiones de terminal remotas, ejecutar comandos y transferir archivos de forma segura a través de redes inseguras como Internet, utilizando el puerto estándar 22.
Reemplazó a protocolos antiguos e inseguros como Telnet y rlogin que transmitían usuarios y contraseñas en texto claro legible por cualquier atacante en la red; SSH cifra todo el canal de comunicación de extremo a extremo mediante criptografía asimétrica y simétrica.
Imagina la diferencia entre enviar postales abiertas por correo postal donde cualquier cartero o vecino puede leer lo que escribiste (Telnet), frente a colocar el documento dentro de una caja fuerte de acero con combinación secreta que viaja en un camión blindado (SSH): solo quien tenga la llave exacta puede abrir la caja y leer el mensaje.
Explicación Paso a Paso del Tema
Generar un par de llaves criptográficas seguras
Usa el algoritmo moderno Ed25519 en lugar del veterano RSA.
Ed25519 utiliza criptografía de curva elíptica: es significativamente más rápida, ofrece llaves mucho más compactas (solo 68 caracteres frente a los miles de RSA) y es inmune a ataques criptográficos conocidos. Durante la generación, se te pedirá una 'passphrase' (frase de paso) para cifrar tu clave privada en el disco duro.
ssh-keygen -t ed25519 -C "usuario@miempresa.com"
| Parámetro / Flag | Tipo / Rol | Significado y Uso |
|---|---|---|
| -t ed25519 | Algoritmo de cifrado | Especifica el esquema de firma digital EdDSA sobre Curve25519 |
| -C "comentario" | Etiqueta identificativa | Comentario legible que ayuda a reconocer de qué máquina proviene la llave |
Usa `ssh-agent` en tu máquina para no tener que escribir tu passphrase cada vez que te conectes: `ssh-add ~/.ssh/id_ed25519`.
Dejar la clave privada sin frase de paso (passphrase) en una laptop portátil; si te roban la computadora, tendrán acceso inmediato a todos tus servidores.
Instalar la clave pública en el servidor remoto
Agrega tu cerradura digital al archivo `authorized_keys` del servidor.
La herramienta `ssh-copy-id` automatiza la conexión, verifica los permisos de carpetas (que deben ser estrictamente 700 para `~/.ssh` y 600 para `authorized_keys`) y añade tu clave pública. Si estás en Windows PowerShell nativo sin ssh-copy-id, puedes concatenarla manualmente usando SSH.
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@ip-servidor
| Parámetro / Flag | Tipo / Rol | Significado y Uso |
|---|---|---|
| ssh-copy-id | Herramienta utilitaria | Copia la clave pública de forma segura al perfil del usuario remoto |
Comprueba los permisos en el servidor: si la carpeta `~/.ssh` tiene permisos abiertos a otros usuarios, el servidor SSH rechazará la conexión por seguridad.
Copiar por error la clave privada (`id_ed25519`) al servidor en lugar de la clave pública terminada en `.pub`.
Configurar atajos en ~/.ssh/config
Evita tener que memorizar direcciones IP largas y puertos.
Crea o edita el archivo `~/.ssh/config` en tu computadora. Puedes definir alias intuitivos para cada servidor indicando el Host, la IP real, el usuario y la ruta a la llave.
# En ~/.ssh/config:
Host mi-servidor
HostName 198.51.100.25
User deploy
IdentityFile ~/.ssh/id_ed25519
Port 22| Parámetro / Flag | Tipo / Rol | Significado y Uso |
|---|---|---|
| Host mi-servidor | Alias local | Nombre corto con el que te conectarás escribiendo solo: ssh mi-servidor |
Tras verificar que entras con tu llave sin contraseña, desactiva el acceso por contraseña en el servidor editando `/etc/ssh/sshd_config` con `PasswordAuthentication no`. Esto neutraliza el 100% de los ataques de fuerza bruta.
Escribir mal el nombre de usuario o la ruta del archivo de identidad en el archivo de configuración.
Casos Prácticos Reales en Producción
Situaciones de ingeniería reales sin mención de presupuestos ficticios.
1Caso de Producción: Neutralización de Ataque de Fuerza Bruta en Servidor de Producción
Un servidor web en la nube recibía más de 120,000 intentos de inicio de sesión por hora por SSH de bots intentando adivinar contraseñas de cuentas como 'root', 'admin' o 'ubuntu', saturando el log del sistema.
El administrador configuró autenticación obligatoria por llave Ed25519, deshabilitó `PasswordAuthentication no`, bloqueó el login directo de root (`PermitRootLogin no`) y cambió el puerto de escucha a un puerto no estándar.
Fichas Nemotécnicas de Conceptos Clave
Glosario rápido para recordar los términos fundamentales de la lección.
Llave secreta que permanece exclusivamente en tu computadora protegida por contraseña; jamás debe compartirse ni enviarse por red.
Cerradura digital correspondiente que puedes compartir y colocar en cualquier servidor al que desees ingresar.
Archivo ubicado en ~/.ssh/ del servidor que lista las claves públicas autorizadas para iniciar sesión en esa cuenta de usuario.
¿Qué es SSH y Cómo Conectarse a un Servidor Remoto de Forma Segura?
Selecciona una opción para autoevaluarte al instante. La respuesta se califica de inmediato.
¿Cuál es la función del archivo 'authorized_keys' en el servidor remoto?
¿Cuál de las siguientes claves NUNCA debe compartirse ni enviarse a terceros por ningún medio?
¿Qué parámetro debe configurarse en '/etc/ssh/sshd_config' para impedir que nadie pueda intentar adivinar contraseñas?
Preguntas Frecuentes (FAQ)
¿Qué significa el mensaje 'Host key verification failed'?
Significa que la huella digital criptográfica del servidor al que te conectas ha cambiado desde la última vez. Puede indicar que el servidor fue reinstalado o, en el peor caso, un ataque de hombre en el medio (Man-In-The-Middle). Para limpiarlo tras reinstalar usa `ssh-keygen -R <ip>`.
¿En qué puerto escucha el servicio SSH por defecto?
El puerto estándar registrado por la IANA para SSH es el puerto TCP 22.
¿Cómo puedo transferir archivos de mi computadora al servidor por SSH?
Puedes usar el comando `scp archivo.txt usuario@servidor:/ruta/` o herramientas visuales SFTP como FileZilla, Cyberduck o la extensión Remote - SSH en VS Code.