Conexión SSH: qué necesitas y cómo iniciar sesión de forma segura

Gabriel Gómez Gómez ·

Conexión SSH: qué necesitas y cómo iniciar sesión de forma segura

  • Aquí tienes una guía clara para iniciar sesión por SSH a un servidor Linux (Ubuntu/CentOS/Rocky). Incluye: datos que debes pedir/guardar, cómo conectarte desde macOS/Linux y Windows, uso de llaves, archivo ~/.ssh/config, bastion (ProxyJump) y resolución de errores comunes.

  • 1) Datos que NECESITAS (pídelos al admin o proveedor):
    • Host (IP pública o nombre DNS): ej. 203.0.113.10 o server.midominio.com
    • Usuario del sistema: ej. ubuntu, rocky, deploy, root (mejor NO root)
    • Puerto: por defecto 22 (a veces 2222/22022 por seguridad)
    • Autenticación: contraseña o (recomendado) llave SSH (par privada+pública)
    • Ruta de la llave privada: ej. ~/.ssh/id_ed25519
    • Passphrase de la llave (si tiene)
    • MFA/OTP si tu empresa lo exige
    • (Opcional) Bastion/Jump host si el servidor no es accesible directamente
    • IPs permitidas (si hay firewall o lista blanca)

  • 2) Generar una llave SSH (recomendado ED25519). Protege la privada con passphrase.

  • terminalBASH
    ssh-keygen -t ed25519 -C "tu.email@ejemplo.com" -f ~/.ssh/id_ed25519
    # Ingresa una passphrase cuando te la pida
  • 3) Copiar tu llave pública al servidor (macOS/Linux con acceso por contraseña).

  • terminalBASH
    ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@server.midominio.com -p 22
  • Si no tienes ssh-copy-id, pega el contenido de tu id_ed25519.pub en ~/.ssh/authorized_keys del servidor con permisos 600 y carpeta 700.

  • 4) Conectarte desde macOS/Linux (contraseña o llave). La primera vez te pedirá confirmar la huella (known_hosts).

  • terminalBASH
    ssh usuario@server.midominio.com
    # Con puerto custom:
    ssh -p 22022 usuario@server.midominio.com
    # Usando llave específica:
    ssh -i ~/.ssh/id_ed25519 usuario@server.midominio.com -p 22
  • 5) Windows (PowerShell con OpenSSH nativo). También puedes usar PuTTY, pero OpenSSH es más directo.

  • PowerShellBASH
    ssh usuario@server.midominio.com -p 22
    # Importar llave (si la generaste en Windows): suele estar en C:\\Users\\TUUSUARIO\\.ssh\\id_ed25519
  • 6) (Opcional pero recomendado) Configurar ~/.ssh/config para simplificar comandos y forzar buenas prácticas.

  • ~/.ssh/configBASH
    nano ~/.ssh/config
    # Ejemplo:
    Host prod
      HostName server.midominio.com
      User deploy
      Port 22
      IdentityFile ~/.ssh/id_ed25519
      IdentitiesOnly yes
      ForwardAgent no
      ServerAliveInterval 30
      ServerAliveCountMax 4
  • Ahora conectas solo con: ssh prod.

  • 7) Acceso vía bastion/jump host (cuando el servidor interno no es público).

  • ~/.ssh/configBASH
    # ~/.ssh/config
    Host bastion
      HostName bastion.midominio.com
      User admin
      IdentityFile ~/.ssh/id_ed25519
    
    Host app-interna
      HostName 10.0.2.15
      User deploy
      ProxyJump bastion
      IdentityFile ~/.ssh/id_ed25519
  • Conéctate con: ssh app-interna (saltará por el bastion automáticamente).

  • 8) Reenvío de puertos (útil para DB/servicios internos). Úsalo solo temporalmente y con cuidado.

  • terminalBASH
    # Accede a PostgreSQL interno 5432 a través del servidor
    ssh -L 5432:127.0.0.1:5432 prod
    # Luego, en tu máquina local conecta a localhost:5432
  • 9) Endurecimiento básico (seguridad):
    • Desactiva login por contraseña y root remoto:
    PasswordAuthentication no, PermitRootLogin no en /etc/ssh/sshd_config.
    • Usa fail2ban o similar y cambia el puerto si tu política lo permite.
    • Limita IPs con firewall (ufw/firewalld/security-groups).
    • Mantén llaves privadas con permisos 600 y carpeta ~/.ssh con 700.
    • Activa 2FA/MFA si está disponible.

  • 10) Errores frecuentes y solución rápida:
    Permission denied (publickey): verifica que la pública esté en ~/.ssh/authorized_keys del usuario correcto y permisos (600 archivo, 700 carpeta).
    No route to host/Connection timed out: revisa IP/puerto, firewall/red, puerto diferente a 22.
    • Cambiaste de IP/host y falla por
    REMOTE HOST IDENTIFICATION HAS CHANGED!: edita ~/.ssh/known_hosts y elimina la línea del host afectado.
    Too many authentication failures: limita llaves con IdentitiesOnly yes y IdentityFile explícito.
    • En Windows, si la llave no carga: revisa permisos del archivo y ubicación (
    C:\Users\TUUSUARIO\.ssh).

  • 11) Buenas prácticas operativas:
    • Registra en un gestor seguro (Vault/1Password) los datos: host, usuario, puerto, ruta de llave, passphrase, bastion.
    • Usa nombres lógicos en ~/.ssh/config (dev, staging, prod).
    • Evita compartir llaves; cada persona debe tener la suya y revocar al salir del equipo.
    • Rota llaves periódicamente.

  • Con esto puedes iniciar sesión SSH de forma segura y repetible. Si me dices tu escenario (bastion, puertos, nube, distro), te dejo un ~/.ssh/config exacto y un checklist de hardening para tu entorno.