Cuando un servidor necesita acceder a varios repositorios privados de GitHub, una buena práctica es utilizar una Deploy Key independiente para cada repositorio, en lugar de compartir la misma llave SSH entre todos.
Este enfoque ofrece varias ventajas:
- Mayor seguridad.
- Permite revocar el acceso a un único repositorio sin afectar a los demás.
- Facilita la administración de permisos.
- Sigue las recomendaciones de GitHub para Deploy Keys.
En este artículo veremos cómo configurar una llave SSH distinta para cada repositorio.
1. Generar una nueva llave SSH
Genera una llave con un nombre que identifique claramente el repositorio.
ssh-keygen -t ed25519 -C "nombre-del-repositorio" -f ~/.ssh/nombre-del-repositorio
Ejemplo de archivos generados:
~/.ssh/nombre-del-repositorio
~/.ssh/nombre-del-repositorio.pub
- Llave privada:
nombre-del-repositorio - Llave pública:
nombre-del-repositorio.pub
2. Agregar la llave pública como Deploy Key
Abre el repositorio en GitHub y navega a:
Settings
└── Deploy keys
└── Add deploy key
Copia el contenido del archivo público:
cat ~/.ssh/nombre-del-repositorio.pub
Pega el contenido en GitHub.
Si el servidor solo necesita clonar el repositorio, no habilites la opción Allow write access.
3. Configurar SSH
Edita (o crea) el archivo de configuración de SSH:
nano ~/.ssh/config
Agrega una entrada para este repositorio:
Host github-nombre-del-repositorio
HostName github.com
User git
IdentityFile ~/.ssh/nombre-del-repositorio
IdentitiesOnly yes
¿Qué significa cada opción?
- Host: Alias que utilizará Git.
- HostName: Servidor real de GitHub.
- User: Siempre será
git. - IdentityFile: Ruta de la llave privada.
- IdentitiesOnly yes: Obliga a SSH a utilizar únicamente esa llave.
4. Verificar la conexión
Puedes comprobar que la configuración funciona correctamente:
ssh -T git@github-nombre-del-repositorio
Si todo está correcto, GitHub responderá con un mensaje similar a:
Hi <usuario>! You've successfully authenticated...
5. Clonar el repositorio
En lugar de utilizar github.com, utiliza el alias definido anteriormente.
git clone git@github-nombre-del-repositorio:usuario/repositorio.git
A partir de ese momento todas las operaciones (clone, pull, fetch, push, etc.) utilizarán automáticamente la llave correspondiente.