PRO · Protocolo 7 · Aplicación (Aplicación)

39.SSH

Protocolo para administrar equipos a distancia por una conexión cifrada y autenticada; reemplazó a Telnet y sirve también para copiar archivos y crear túneles.

¿Qué es?

SSH (Secure Shell) es el protocolo para conectarte a la terminal de otro equipo —un servidor Linux, un router, un switch— y trabajar en él como si estuvieras enfrente, con todo el tráfico cifrado.

Es como tener una línea telefónica privada con el equipo: nadie puede escuchar lo que dices ni hacerse pasar por ti, y antes de hablar compruebas que del otro lado está el equipo correcto.

En términos técnicos

  • Es un protocolo de la capa 7 (Aplicación) que usa TCP en el puerto 22.
  • La versión actual es SSH-2 (RFC 4251 a 4254, 2006). SSH-1 es inseguro y no debe usarse.
  • Reemplaza a Telnet (puerto 23), que envía usuario, contraseña y comandos sin cifrar.
  • El servidor se identifica con su llave de servidor (host key); el usuario, con contraseña o, mejor, con una llave pública.
  • Sobre la misma conexión permite copiar archivos (SFTP, SCP) y crear túneles (reenvío de puertos).

¿Dónde lo vas a encontrar?

En la administración de servidores Linux, de equipos Cisco y de casi cualquier dispositivo de red, en el hosting (para entrar al servidor y desplegar sitios), en Git (git@github.com:…) y en los respaldos automáticos entre servidores.

¿Cómo funciona?

Las etapas de una conexión

Etapa Qué pasa
1. TCP El cliente se conecta al puerto 22
2. Versiones Cada lado anuncia su versión (SSH-2.0-OpenSSH_9.6)
3. Negociación Acuerdan algoritmos de intercambio de llaves, cifrado e integridad
4. Intercambio de llaves Con Diffie-Hellman (p. ej. curve25519) calculan una llave de sesión sin enviarla
5. Identidad del servidor El servidor firma con su host key; el cliente la compara con la que tiene guardada
6. Autenticación del usuario Contraseña, llave pública o ambas
7. Sesión Terminal, transferencia de archivos o túnel, todo cifrado

La llave del servidor

La primera vez que te conectas, el cliente muestra la huella (fingerprint) de la llave del servidor y pregunta si confías en ella. Si aceptas, la guarda (en Linux, en ~/.ssh/known_hosts). En las siguientes conexiones la compara: si cambió, te advierte, porque podría ser otro equipo haciéndose pasar por el servidor.

Autenticación con llave pública

  1. Generas un par de llaves en tu equipo: una privada (no se comparte nunca) y una pública.
  2. Copias la pública al servidor.
  3. Al conectarte, el servidor te envía un reto que solo puede firmar quien tiene la privada.
  4. Si la firma es correcta, entras sin escribir contraseña.
$ ssh-keygen -t ed25519 -C "paco@laptop"
$ ssh-copy-id paco@203.0.113.20
$ ssh paco@203.0.113.20

Configuración (Cisco IOS)

R1(config)# hostname R1
R1(config)# ip domain-name lab.test
R1(config)# crypto key generate rsa modulus 2048
R1(config)# ip ssh version 2
R1(config)# username admin privilege 15 secret Cl4ve-Segura
R1(config)# line vty 0 4
R1(config-line)# transport input ssh
R1(config-line)# login local
R1(config-line)# exec-timeout 10 0
R1(config-line)# access-class ADMIN-SSH in
R1(config-line)# exit
R1(config)# login block-for 120 attempts 3 within 60
Comando Para qué sirve
hostname + ip domain-name Son necesarios para generar las llaves (forman su nombre)
crypto key generate rsa modulus 2048 Crea la llave del equipo; activa el servidor SSH
ip ssh version 2 Solo acepta SSH-2
username admin privilege 15 secret … Usuario local con contraseña guardada con hash
transport input ssh Las líneas remotas solo aceptan SSH (no Telnet)
login local Pide el usuario y contraseña locales
exec-timeout 10 0 Cierra la sesión tras 10 minutos sin actividad
access-class ADMIN-SSH in Solo permite conectarse desde la red de administración (ficha de ACL)
login block-for 120 attempts 3 within 60 Bloquea los intentos 2 minutos si hay 3 fallos en 1 minuto

En un servidor Linux (OpenSSH)

En /etc/ssh/sshd_config, después de comprobar que entras con tu llave:

PermitRootLogin no
PasswordAuthentication no

Y reinicia el servicio: sudo systemctl restart ssh (o sshd).

Verificación y diagnóstico

Comando Qué debes ver
show ip ssh (Cisco) SSH Enabled - version 2.0 y los tiempos configurados
show ssh (Cisco) Las sesiones SSH abiertas en ese momento
ssh -l admin 192.168.99.1 (desde otro equipo Cisco) El inicio de sesión remoto
ssh -v usuario@servidor (Linux, Windows) Cada etapa de la conexión, para ver dónde falla
show login failures (Cisco) Intentos de inicio de sesión fallidos

Para tomar en cuenta

  • Usa llaves en lugar de contraseñas en servidores expuestos a Internet, y desactiva la autenticación por contraseña.
  • No entres como root: entra con tu usuario y usa sudo.
  • Limita desde dónde se puede entrar: firewall o ACL que solo permita la red de administración o una VPN.
  • Ed25519 es la opción recomendada para llaves nuevas; RSA debe ser de al menos 3072 bits en servidores.
  • Cambiar el puerto 22 reduce el ruido de bots en los registros, pero no sustituye las medidas anteriores.
  • Herramientas como Fail2ban bloquean las IP con muchos intentos fallidos.
  • Revisa las llaves autorizadas de vez en cuando y quita las de personas que ya no deben entrar.

Material descargable

Aún no hay material descargable para este tema. Pronto habrá cuadernillos, manuales o laboratorios.

Referencias (RFC / estándar)

  • IETF. RFC 4251 — The Secure Shell (SSH) Protocol Architecture (2006). https://www.rfc-editor.org/rfc/rfc4251
  • IETF. RFC 4252, 4253 y 4254 — autenticación, transporte y conexión de SSH (2006).
  • IETF. RFC 8709 — Ed25519 and Ed448 Public Key Algorithms for the Secure Shell Protocol (2020).
  • OpenSSH. Manual pages: ssh, sshd_config, ssh-keygen. https://www.openssh.com/manual.html
  • Cisco Systems. Secure Shell Configuration Guide (documentación oficial de Cisco IOS).

Antes conviene ver…

© solutions_ · Redes informáticas · 39 SSH