Como utilizar distintos SSH keypairs (por proyecto)

post-ssh.png
Solucionex
21
Jul 21

En ocasiones he tenido la necesidad de logarme en el mismo servidor (por ejemlo Bitbucket) con 2 cuentas distintas, utilizo varios navegadores. Para el usuario A uso Firefox y para el B Chrome.

Para hacer push y pull es un poco mas complicado. Podría utilizar el acceso por https, pero eso me llevaría a tener que meter la contraseña en cada cambio. Por eso me decido a utilizar ssh.

En el caso de que tengamos distintos repositorios a los que se accede desde distintas cuentas y, sobre todo, si utilizamos varias cuentas en el mismo servidor (Bitbucket por ejemplo, no permite utilizar el mismo keypair en sus servidores aun siendo distintas cuentas), necesitaremos varios keypair.

Si utilizamos ssh este nos permite utilizar un fichero de configuracion en ~/.ssh/config que nos permite configurar distintos keypairs por host.

host github.com HostName github.com IdentityFile ~/.ssh/id_rsa User solucionex

Sin embargo esto no nos ayuda, ya que se basa en el nombre de host de destino y quiero acceder al mismo host, e incluso usar el mismo nombre de usuario remoto (git) pero usar dos archivos de identidad diferentes (como hago en bitbucket).

 

Solución

Generamos varios keypairs:

Cuando queramos clonar por primer vez un proyecto configuramos el global:

git config --global core.sshCommand "ssh -i ~/.ssh/id_rsa_pertinente" git clone ... git config --global --unset core.sshCommand

Luego en cada proyecto clonado debemos configurar de manera local donde buscará git su id de identidad (keypair) y añadimos el nombre y el email con el que se identificará en los commits.

cd project-dir git config --local core.sshCommand "ssh -i ~/.ssh/id_rsa_pertinente" git config --local user.name "Solucionex" git config --local user.email jose.fanjul@solucionex.com

Estos comandos afectarán al .git/config local en el proyecto.


Si hemos seguido bien todos los pasos podremos hacer push y pull en cualquier proyecto a sus respectivos servidores sin tener que estar escribiendo contraseñas o cambiando el identificador global.