Configuración del cliente para autenticación SSH con clave pública (Windows/Linux)

Descripción general

Este artículo explica los pasos de configuración del cliente para conectarse de forma segura a un servidor mediante autenticación SSH con clave pública. Está dirigido a entornos Windows y Linux.

Requisitos previos

  • El cliente SSH ya está instalado (Windows 10 o posterior, Linux estándar)
  • El servidor SSH permite la autenticación por clave pública
  • Existe una cuenta de usuario en el servidor

Tipos de claves y métodos de cifrado

Los tipos de claves más comunes usados en SSH son RSA, ECDSA y Ed25519. La siguiente tabla compara sus características, usos recomendados y compatibilidad.

Tipo de clave Características Uso recomendado Compatibilidad
RSA Muy usada y ampliamente compatible; longitud de clave ajustable Entornos con sistemas antiguos Muy alta
ECDSA Usa criptografía de curva elíptica, más rápida con claves más cortas Entornos con énfasis en rendimiento Media
Ed25519 Nuevo estándar, rápido y muy seguro, tamaño pequeño Nuevas implementaciones y alta seguridad Alta (OpenSSH ≥ 6.5)

Ed25519 es el estándar moderno recomendado. RSA sigue siendo útil por compatibilidad; ECDSA es un punto intermedio.

Convenciones de variables

Variable Ejemplo Descripción
<<USERNAME>> exampleuser Nombre del usuario local
<<SERVER>> 192.168.1.10 Dirección o IP del servidor
<<USER>> ubuntu o ec2-user Usuario SSH en el servidor
<<EMAIL_ADDRESS>> user@example.com Comentario opcional para la clave

Nota sobre Windows

Los comandos para Windows están pensados para PowerShell.
Si se usa cmd.exe, reemplace $env:USERPROFILE por %USERPROFILE%.

Cliente Windows

Paso 1: Generar claves

Ejecutar PowerShell como administrador:

ssh-keygen -t ed25519 -C "<<EMAIL_ADDRESS>>"

Ejemplo de salida:

Generating public/private ed25519 key pair.
Your identification has been saved in /C:/Users/<<USERNAME>>/.ssh/id_ed25519
Your public key has been saved in /C:/Users/<<USERNAME>>/.ssh/id_ed25519.pub

Clave pública: $env:USERPROFILE\.ssh\id_ed25519.pub
Clave privada: $env:USERPROFILE\.ssh\id_ed25519

Paso 2: Copiar clave al servidor

cat $env:USERPROFILE\.ssh\id_ed25519.pub | ssh <<USER>>@<<SERVER>> "mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys"

O copiar manualmente el contenido en ~/.ssh/authorized_keys en el servidor.

Paso 3: Verificar conexión

ssh -i $env:USERPROFILE\.ssh\id_ed25519 <<USER>>@<<SERVER>>

Cliente Linux

Paso 1: Generar claves

ssh-keygen -t ed25519 -C "<<EMAIL_ADDRESS>>"

Salida esperada:

Enter file in which to save the key (/home/<<USERNAME>>/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):

Clave pública: ~/.ssh/id_ed25519.pub
Clave privada: ~/.ssh/id_ed25519

Paso 2: Registrar clave en el servidor

ssh-copy-id -i ~/.ssh/id_ed25519.pub <<USER>>@<<SERVER>>

O editar manualmente ~/.ssh/authorized_keys.

Paso 3: Verificar conexión

ssh -i ~/.ssh/id_ed25519 <<USER>>@<<SERVER>>

Uso de claves con frase de contraseña

Si la clave privada tiene una frase, configure un agente SSH para evitar introducirla cada vez.

Paso 1: Iniciar agente

Windows:

Set-Service -Name ssh-agent -StartupType Manual
Start-Service ssh-agent

Linux:

eval "$(ssh-agent -s)"

Para inicio automático:

Windows:

Set-Service -Name ssh-agent -StartupType Automatic

Linux:
Agregar en ~/.bashrc:

eval "$(ssh-agent -s)" > /dev/null

Paso 2: Registrar clave

Windows:

ssh-add $env:USERPROFILE\.ssh\id_ed25519

Linux:

ssh-add ~/.ssh/id_ed25519

Paso 3: Confirmar registro

ssh-add -l

Configuración del archivo config del cliente SSH

Para simplificar conexiones, cree el archivo ~/.ssh/config (en Windows: C:\Users\<<USERNAME>>\.ssh\config):

Host myserver
    HostName <<SERVER>>
    User <<USER>>
    IdentityFile ~/.ssh/id_ed25519
    Port 22

En Windows use $env:USERPROFILE\.ssh\id_ed25519.

Con esto, bastará ejecutar:

ssh myserver

Múltiples servidores

Host web
    HostName 192.168.1.10
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519

Host db
    HostName 192.168.1.11
    User ec2-user
    IdentityFile ~/.ssh/id_ed25519

Se recomienda usar diferentes claves por servidor cuando sea posible.


Verificación

Use salida detallada para depuración:

ssh -vvv -i ~/.ssh/id_ed25519 <<USER>>@<<SERVER>>

Authentication succeeded (publickey) indica éxito.


Solución de problemas

  1. Autenticación por clave deshabilitada en el servidor
    Revise PubkeyAuthentication yes en sshd_config.

  2. Clave no registrada o incorrecta
    Verifique que la clave pública esté en ~/.ssh/authorized_keys.

  3. Datos de conexión erróneos
    Asegúrese de usar el usuario, host y permisos correctos.


Conclusión

La autenticación SSH con clave pública permite conexiones seguras sin contraseñas.
Tanto en Windows como en Linux, ssh-keygen y una configuración correcta de permisos garantizan seguridad y eficiencia.