Skip to content

Guía SSH completa

Crear claves SSH, copiarlas al servidor, acceso sin contraseña, alias en config y manejo de múltiples cuentas de GitHub.

Todo mi flujo SSH en una sola guía: crear el par de claves, dejarlas en el servidor, conectarse sin contraseña, y manejar varias identidades (proyectos personales y de trabajo) contra GitHub.

  • La clave pública (.pub) es la chapa de la puerta: se instala en el servidor o servicio al que quiero entrar.
  • La clave privada es la llave: nunca sale de mi máquina.
Terminal window
ssh-keygen -t rsa -b 4096 -f $HOME/.ssh/miclave
  • -f define el nombre; sin él se crean las claves por defecto (id_rsa).
  • Presionar Enter cuando pida passphrase para dejarla en blanco (acceso sin contraseña).
  • Genera dos archivos: miclave (privada) y miclave.pub (pública).
Terminal window
ssh-copy-id -i ~/.ssh/miclave.pub usuario@servidor

Con puerto no estándar:

Terminal window
ssh-copy-id -p 22222 -i ~/.ssh/miclave.pub usuario@servidor

Si ssh-copy-id no está disponible, manualmente:

Terminal window
cat ~/.ssh/miclave.pub | ssh usuario@servidor "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Permisos correctos en el servidor (crítico)

Section titled “Permisos correctos en el servidor (crítico)”

Si los permisos no están bien, SSH sigue pidiendo contraseña aunque la clave esté instalada:

Terminal window
ssh usuario@servidor "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
Terminal window
ssh -p 22222 -i $HOME/.ssh/miclave usuario@servidor

Agregar -v para modo verboso si algo falla.

Para no repetir puerto, usuario y clave en cada conexión:

Terminal window
Host miservidor
HostName servidor.ejemplo.com
User usuario
Port 22222
IdentityFile ~/.ssh/miclave

Y luego basta con:

Terminal window
ssh miservidor

GitHub acepta claves en dos niveles:

  1. De cuenta (Settings → SSH and GPG Keys): válida para todos los repos de la cuenta.
  2. Deploy key por repositorio (Settings del repo → Deploy keys): válida solo para ese repo. Marcar Allow write access si se necesita hacer push.

Cuando hay varias cuentas o proyectos, cada uno con su clave, se definen hosts alias en ~/.ssh/config:

Terminal window
# Proyecto de trabajo
Host github.com-tellevo
HostName github.com
User git
IdentityFile ~/.ssh/id_tellevo_sistema
# Solo para docs
Host github-docs-goviedo
HostName github.com
User git
IdentityFile ~/.ssh/id_pc_github
# Proyectos personales
Host github-goviedo
HostName github.com
User git
IdentityFile ~/.ssh/id_github_goviedo

El remote del repo usa el alias en lugar de github.com:

Terminal window
git remote set-url origin git@github-goviedo:goviedo/mi-repo.git

Habilitar el agente y cargar la clave:

Terminal window
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_github_goviedo

Verificar:

Terminal window
ssh-add -L # lista las claves cargadas
ssh -T github-goviedo # prueba la autenticación contra GitHub