Manejando multiples GitHub Deploy Keys en un solo servidor
Les ha pasado que tienen un servidor el cual hace deploys desde multiples cuentas de Github y no saben cómo resolverlo?
Pues si, es un problema bastante común y de hecho me pasó recientemente cuando moví algunos de mis repositorios desde mi cuenta personal a una cuenta de equipo, lo que ocurría anteriormente es que mi servidor se hacia pull a diferentes repositorios pero todos estaban alojados con la misma cuenta de Github, pero al tener que hacer pull desde dos diferentes cuentas tuve problemas ya que por omisión SSH solamente almacena las credenciales de una sola cuenta.
La forma más fácil de lograr esto es aprovechar la configuración de host de SSH.
Digamos que tienes usuario1/repo1 y usuario2/repo2 y deseas implementar los pulls desde tu servidor, entonces lo primero que debes hacer es crear un par de claves rsa para cada repositorio (ojo, te preguntará por una clave, así es que simplemente presiona enter para continuar y dejar la clave vacía):
ssh-keygen -t rsa -f ~/.ssh/repo1_rsa -C "repo1" ssh-keygen -t rsa -f ~/.ssh/repo2_rsa -C "repo2"
Una vez que has generado las nuevas claves, solo necesitas copiar las claves públicas y pegarlas en la respectiva sección de "Github deployment keys" de cada repositorio.
cat ~/.ssh/repo1_rsa.pub cat ~/.ssh/repo2_rsa.pub
A continuación, necesitas registrar las nuevas claves usando ssh-agent, es muy importante que verifiques que ssh-agent esta corriendo antes de utilizarlo, simplemente ejecutando el comando:
eval "$(ssh-agent -s)"
Puede que el ssh-agent no esté corriendo entonces simplemente ejecuta en tu consola
eval "ssh-agent -s"
Una vez que el ssh-agent este funcionando debes ejecutar el siguiente comando para elimiar cualquier llave que se encuentre en la cache:
ssh-add -D
y ahora si procedes a registrar las llaves
ssh-add ~/.ssh/repo1_rsa ssh-add ~/.ssh/repo2_rsa
Puedes verificar que las llaves fueron almacenadas correctamente utilizando:
ssh-add -l
Y verás una salida de código en la cual te muestra las claves agregadas a tu SSH.
Y ahora que tienes las llaves creadas y registradas en tu servidor, necesitarás agregar la configuración para estas dos nuevas llaves en la configuración de tu SSH modificando el archivo ~/.ssh/config.
# Mi repo1
Host github.com.repo1 HostName github.com User git IdentityFile ~/.ssh/repo1_rsa
# Mi repo2 Host github.com.repo2 HostName github.com User git IdentityFile ~/.ssh/repo2_rsa
No olvides probar los nuevos host y la conexión a los repos configurados:
ssh -T [email protected]
Y finalmente, al momento de clonar cada repositorio, debes de utilizar el host que se creó para cada repo.
git clone github-repo1:usuario1/repo1 git clone github-repo2:usuario2/repo2
Happy coding!
Photo by Eric Prouzet on Unsplash