Copiar clave SSH a servidores remotos
Prerequisito: tener el par de claves generado
ssh-keygen -t ed25519 -C "comentario_identificativo" -f ~/.ssh/id_nombre_clave
# Genera: ~/.ssh/id_ed25519 (privada) y ~/.ssh/id_ed25519.pub (pública)
Solo la clave pública (
.pub) va al servidor. Nunca compartas la privada.
Desde Linux / macOS
Método 1 — ssh-copy-id (recomendado)
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@servidor
# Pide contraseña una vez, luego ya no la necesitarás
Método 2 — Manual (si no tienes ssh-copy-id)
cat ~/.ssh/id_ed25519.pub | ssh usuario@servidor \
"mkdir -p ~/.ssh && chmod 700 ~/.ssh && \
cat >> ~/.ssh/authorized_keys && \
chmod 600 ~/.ssh/authorized_keys"
Validar
ssh -i ~/.ssh/id_ed25519 usuario@servidor
# Debe entrar sin pedir contraseña
Desde Windows
Método 1 — PowerShell (sin herramientas extra)
# Leer la clave pública
$pubKey = Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub"
# Copiarla al servidor (pide contraseña una vez)
ssh usuario@servidor "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '$pubKey' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Método 2 — ssh-copy-id en Git Bash / WSL
Si tienes Git Bash o WSL instalado, funciona igual que en Linux:
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@servidor
Validar desde PowerShell
ssh -i "$env:USERPROFILE\.ssh\id_ed25519" usuario@servidor
Múltiples servidores (script rápido)
#!/bin/bash
# deploy_key.sh — copia la clave pública a varios servidores
CLAVE="$HOME/.ssh/id_ed25519.pub"
USUARIO="admin"
SERVIDORES=(
"192.168.1.10"
"192.168.1.11"
"srv-web01.dominio.local"
)
for HOST in "${SERVIDORES[@]}"; do
echo "→ Copiando a $HOST..."
ssh-copy-id -i "$CLAVE" "$USUARIO@$HOST" && echo "✓ OK" || echo "✗ Fallo en $HOST"
done
chmod +x deploy_key.sh && ./deploy_key.sh
Permisos críticos en el servidor (si algo falla)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh
Permisos incorrectos son la causa más común de que SSH ignore
authorized_keys.
Troubleshooting rápido
| Síntoma | Causa probable |
|---|---|
| Sigue pidiendo contraseña | Permisos mal en ~/.ssh/ o authorized_keys |
Permission denied (publickey) |
Clave no copiada o usuario equivocado |
Funciona con -i pero no sin ella |
~/.ssh/config no configurado o agente sin clave cargada |
Si sigue fallando, depura con:
ssh -vvv usuario@servidor 2>&1 | grep -E "key|auth|permission"
Bonus: ~/.ssh/config para no escribir usuario/IP cada vez
# ~/.ssh/config
Host srv-web
HostName 192.168.1.10
User admin
IdentityFile ~/.ssh/id_ed25519
Host srv-db
HostName 192.168.1.11
User dbadmin
IdentityFile ~/.ssh/id_ed25519
Luego simplemente: ssh srv-web