Es muy comun que como desarrollador software tengas proyectos en tu maquina donde tienes repositorios tanto con cuenta del trabajo como con cuenta personal. Propablemente ya te has topado con problemas como "Permisson denied (publickey)" cuanto tratas de hacer "push" de alguno de esos repositorios. Que puede estar pasando? seguramente alguna confusion en cuanto a las llaves SSH que usar.
Este problema lo tuve durante mucho tiempo con la maquina del trabajo, y mi forma de solucionarlo era constantemente reiniciar el agente ssh (ssh-agent) y cargar la llave publica SSH correcta con la que iba a trabajar en esa sesion en la terminal. Incluso, debido a esto, llegaba a hacer commit a repositorios del trabajo con mi cuenta personal, algo que no se debe de hacer.
Alias para Host SSH
El primer paso es tener bien configurado el archivo ~/.ssh/config de la siguiente manera
# Cuenta personal github
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/llavePublicaPersonalSsh
AddKeysToAgent yes
UserKeychain yes
# Cuenta github del trabajo
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/llavePublicaTrabajoSsh
AddKeysToAgent yes
UserKeychain yes
------------------------------------------------------------------------------
Esto crea 2 alias, uno para la cuenta personal y otra para del trabajo, y que estaran usando diferentes llaves publicas SSH, aunque como puedan notar, ambas esten apuntando al HostName github.com.
Configura .gitconfig
Podemos configurar git para que automaticamente use diferentes configuraciones basado en el directorio en que nos encontremos de la siguiente forma en el archivo ~/.gitconfig
[user]
name = Tu nombre
email = personal@email.com
[includeif "gitdir:~/Projects/Personal/"]
path = ~/.gitconfig-personal
[includeif "gitdir:~/Projects/Work/"]
path = ~/.gitconfig-work
-----------------------------------------------------------------------------
Despues el archivo ~/.gitconfig-personal
[user]
name = Tu nombre
email = personal@email.com
[core]
sshCommand = ssh -i ~/.ssh/llavePublicaPersonalSsh
-----------------------------------------------------------------------------
[user]
name = Tu nombre
email = work@email.com
[core]
sshCommand = ssh -i ~/.ssh/llavePublicaTrabajoSsh
-----------------------------------------------------------------------------
que estamos logrando con esto? ah pues es muy facil de probar.
Si llegamos a crear proyectos git debajo del folder ~/Projects/Personal por default, la configuracion de user.name y user.email sera la definida en el archivo ~/.gitconfig-personal. Esto lo podemos verificar muy facilmente si seguimos los siguientes pasos:
- Crea un folder dentro de ~/Projects/Personal, digamos ~/Projects/Personal/ejemplo
- Dentro del folder inicia un repositorio de git con git init
- Verifica que el comando: git config user.name muestra tu nombre
- Verifica que el comando: git config user.email muestra tu correo personal
Clona repositorios con el Host correcto
-----------------------------------------------------------------------------
cd ~/Projects/Work/Repositories
git clone git@github-work:company/some-interesting-project.git
-----------------------------------------------------------------------------
Actualiza repositorios exsitentes
-----------------------------------------------------------------------------
# Entra al folder
cd ~/Projects/Work/Repositories/interesting-project-already-cloned
# Ve que remote URLs hay
# Actualiza
# Verifica que las remote URL de origin cambiaron
git remote -v
-----------------------------------------------------------------------------
# Inicia el agente SSH
eval "$(ssh-agent -s)" > /dev/null
# Agrega la llave privada personal
ssh-add ~/.ssh/llavePublicaPersonalSsh > /dev/null
# Agrega la llave privada del trabajo
ssh-add ~/.ssh/llavePublicaTrabajoSsh > /dev/null
-----------------------------------------------------------------------------
No comments:
Post a Comment