Flujo de trabajo
Dos cuentas de GitHub en el mismo equipo, detrás de una VPN
3 min de lectura
Dos cuentas de GitHub en el mismo equipo, detrás de una VPN
Uso dos cuentas de GitHub en el mismo portátil: una personal para mis proyectos y otra de trabajo para los repositorios de la empresa. La mayor parte del tiempo funciona sin problemas con claves SSH. Pero cuando trabajo desde China, donde me conecto a través de una VPN, el comando habitual de clonado empezó a fallarme, y la solución resultó lo bastante pequeña como para dejarla anotada.
El síntoma
Con dos cuentas configuradas en local, clonar con la dirección estándar de GitHub no funcionaba en ese entorno:
# No me funcionaba detrás de la VPN con dos cuentas configuradas
git clone git@github.com:personal-user/repo.git
La solución: usar el alias de host SSH, no github.com
Cuando tienes más de una cuenta, cada una suele tener su propia clave SSH, y ~/.ssh/config define un alias de host por cuenta que apunta a GitHub con la clave correcta. Algo así (los nombres son de ejemplo):
Host personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
Host work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
La clave está en usar ese alias en la URL del remoto en lugar de github.com. Así SSH aplica la configuración del alias, incluida la clave que debe presentar:
# Cuenta personal
git clone git@personal:personal-user/repo.git
# Cuenta de trabajo
git clone git@work:work-org/repo.git
Usar el alias de forma consistente fue lo que hizo que el clonado volviera a funcionar con ambas cuentas en mi caso. Además tiene un efecto secundario útil: siempre queda explícito qué identidad usa cada repositorio.
Plan B: cuando Git no encuentra el host
A veces Git directamente no conseguía resolver el host. Cuando pasa, cambio el remoto de ese repositorio a HTTPS con el usuario en la URL:
git remote set-url origin https://personal-user@github.com/personal-user/repo.git
Entonces Git pide una credencial para ese usuario concreto por HTTPS. Es menos elegante que SSH, pero permite hacer el push cuando la ruta SSH no colabora.
Lo que tengo presente
- Con varias cuentas, nunca clono con
git@github.com:a secas; siempre uso el alias de la cuenta a la que debe pertenecer el repositorio. - Si un repositorio ya se clonó con la dirección equivocada, lo corrijo con
git remote set-urlen lugar de volver a clonarlo. - HTTPS con usuario explícito es el plan B, no el modo por defecto.
Es algo pequeño, pero dejarlo por escrito me ha ahorrado redescubrirlo cada vez que cambio de red.