Crear llave SSH
Crear llave SSH ed25519
[!info] ¿Por qué ed25519? Es el algoritmo recomendado hoy: llaves cortas, más rápido y más seguro que RSA. Úsalo siempre que el servidor lo soporte (GitHub, GitLab, OpenSSH ≥ 6.5). Solo usa RSA (
-t rsa -b 4096) con sistemas muy viejos.
1. Generar la llave
ssh-keygen -t ed25519 -C "correo_electronico@dominio.com"
| Opción | Qué hace |
|---|---|
-t ed25519 |
Tipo de algoritmo |
-C "..." |
Comentario para identificar la llave (normalmente el correo o usuario@equipo) |
-f ~/.ssh/nombre |
Nombre/ruta del archivo (útil si tienes varias llaves) |
-a 100 |
Rondas KDF para proteger la passphrase (más = más resistente a fuerza bruta) |
Ejemplo con nombre personalizado:
ssh-keygen -t ed25519 -C "trabajo@empresa.com" -f ~/.ssh/id_ed25519_trabajo
Durante la generación:
- Ubicación: Enter acepta la ruta por defecto
~/.ssh/id_ed25519. - Passphrase: recomendable ponerla. Con
ssh-agentsolo la escribes una vez por sesión.
Se crean dos archivos:
| Archivo | Descripción |
|---|---|
id_ed25519 |
🔒 Llave privada, nunca se comparte ni se sube a ningún lado |
id_ed25519.pub |
🔓 Llave pública, es la que se copia a servidores o GitHub |
[!tip] Rutas
- Linux/macOS/Git Bash:
~/.ssh/- Windows (PowerShell):
C:\Users\<usuario>\.ssh\
2. Agregar la llave al ssh-agent
Así no tienes que escribir la passphrase cada vez.
Linux / macOS / Git Bash
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Windows (PowerShell como administrador, solo la primera vez)
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519
macOS (guardar passphrase en el Keychain)
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
Ver las llaves cargadas:
ssh-add -l
3. Copiar la llave pública
# Linux / Git Bash
cat ~/.ssh/id_ed25519.pub
# Windows (al portapapeles)
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard
# Git Bash (al portapapeles)
clip < ~/.ssh/id_ed25519.pub
# macOS (al portapapeles)
pbcopy < ~/.ssh/id_ed25519.pub
4. Usar la llave
GitHub / GitLab
- GitHub → Settings → SSH and GPG keys → New SSH key GitLab → Preferences → SSH Keys
- Pegar el contenido del
.puby ponerle un título (ej.Laptop-Windows). - Probar la conexión:
ssh -T git@github.com
# Hi <usuario>! You've successfully authenticated...
- Clonar usando la URL SSH (
git@github.com:usuario/repo.git). Para cambiar un repo existente de HTTPS a SSH:
git remote set-url origin git@github.com:usuario/repo.git
Servidor Linux (VPS, Debian, etc.)
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@servidor
[!note] Windows no trae
ssh-copy-idAlternativa desde PowerShell:type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh usuario@servidor "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
5. Varias llaves: archivo ~/.ssh/config
Útil para separar cuentas (personal / trabajo) o poner alias a servidores.
# GitHub personal
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
# GitHub trabajo
Host github-trabajo
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_trabajo
IdentitiesOnly yes
# Servidor
Host mi-vps
HostName 203.0.113.10
User emmanuel
Port 22
IdentityFile ~/.ssh/id_ed25519
Uso:
git clone git@github-trabajo:empresa/repo.git
ssh mi-vps
6. Permisos (Linux / macOS)
SSH rechaza llaves con permisos demasiado abiertos (UNPROTECTED PRIVATE KEY FILE!).
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/config
7. Comandos útiles
# Cambiar o agregar passphrase a una llave existente
ssh-keygen -p -f ~/.ssh/id_ed25519
# Ver la huella (fingerprint) de una llave
ssh-keygen -lf ~/.ssh/id_ed25519.pub
# Regenerar la pública a partir de la privada
ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub
# Depurar una conexión que falla
ssh -vT git@github.com
# Eliminar un host de known_hosts (cuando cambió su huella)
ssh-keygen -R servidor
8. Problemas comunes
| Error | Causa probable / solución |
|---|---|
Permission denied (publickey) |
La llave pública no está en el servidor/GitHub, o SSH usa otra llave → revisar ssh -vT y ~/.ssh/config |
UNPROTECTED PRIVATE KEY FILE! |
Permisos abiertos → ver [[#6. Permisos (Linux / macOS)]] |
Could not open a connection to your authentication agent |
El ssh-agent no está corriendo → ver [[#2. Agregar la llave al ssh-agent]] |
REMOTE HOST IDENTIFICATION HAS CHANGED! |
El servidor se reinstaló o cambió de llave → ssh-keygen -R servidor (verificar que sea legítimo) |
| Pide passphrase cada vez | La llave no está en el agente → ssh-add |
[!warning] Seguridad
- Nunca compartas ni subas a un repo la llave privada.
- Usa passphrase, sobre todo en laptops.
- Una llave por equipo: si pierdes uno, solo revocas esa llave.
- Revoca en GitHub/servidores las llaves de equipos que ya no uses.