Introducción
Normalmente uso git como herramienta de control de código fuente. Por lo general el escenario que me he encontrado es una única cuenta en mi equipo. Ya que en equipo personal hago mis pruebas con bitbucket y en el trabajo con el servidor GIT que ponga a mi disposición la empresa.
En la actualidad, trabajo con un servidor GIT centralizado pero algunas entidades con las que colaboramos en el trabajo tienen sus propios servidores GIT. Esto plantea un escenario nuevo. Ya que si usas git sobre protocolo HTTP te da igual pero hoy en día por cuestiones de seguridad es muy recomendable SSH y en este caso es donde aparece el “problema”.
No es un problema, claro, pero para poder trabajar contra varios servidores con claves de acceso RSA para SSH diferentes es necesario configurar un poco el equipo. El siguiente ejemplo lo he hecho en Windows 10 con Git Bash pero en un shell de GNU/Linux o macOS sugpongo que irá igual (o muy parecido).
Escenario
Para evitar usar URLS reales (cosa que no puedo) vamos a suponer que dispongo de uno o mas servidores git de mi empresa, para los cuales tengo un usuario único y una pareja de claves SSH generadas (id_rsa y id_rsa.pub) en mi directorio ~./ssh.
Ocurre que ahora he de comunicarme con un servidor nuevo que está fuera de mi entorno habitual, por ejemplo bitbucket.org. En este caso mis claves (id_rsa y id_rsa.pub) no me sirven para acceder a al protocolo git+ssh,
Solución
Parte 1, nuevas claves
La primera parte es sencilla, consiste en generar unos ficheros de claves nuevos
Ejecutamos el comando ssh-keygen e indicamos que queremos crear el fichero ~/.ssh/id_rsa_bitbucket (usamos la opción -f fichero_clave). Nos pedira un <password>, el cual introducimos dos veces y habrá generado los ficheros id_rsa_bitbucket y id_rsa_bitbucket.pub. Éstos tendrán un aspecto similar a esto:
id_rsa_bitbucket -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDjVQNgBj ... N3mBPX+icCZSO9RBVvAO39vYLTg= -----END OPENSSH PRIVATE KEY-----
id_rsa_bitbucket.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHFIAvWdrhT9xbM+iwp+PL1fWhXrr8P+Lp...... PsdWU= usuario@domain
Luego nos queda añadir estas claves al agente SSH local, ejecutamos el comando eval $(ssh-agent) y luego añadirmos la clave con ssh-add ~/.ssh/id_rsa_bitbucket. Nos pedirá la clave que hemos introducido en el paso del ssh-keygen.
Aún nos queda algo para que todo esto funcione.
Paso 2,, crear una configuración para cada Host SSH
Para que nuestro cliente SSH sepa qué pareja de claves pública y privada debe usar en cada conexión es necesario que se lo indiquemos, pues de otra forma siempre usará las por defecto, es decir, (id_rsa y id_rsa.pub).
Creamos el fichero ~/.ssh/config y añadimos este contenido:
Host bitbucket.org AddKeysToAgent yes IdentityFile ~/.ssh/id_rsa_bitbucket Host * AddKeysToAgent yes IdentityFile ~/.ssh/id_rsa
Y con esto estaría, básicamente para toda conexión que vaya a un host bitbucket.org usaría las claves que acabamos de crear y para el resto las que ya existían.
Verificación
Podemos ver que esto funciona correctamente con la siguiente prueba:
$ ssh -T git@bitbucket.org authenticated via ssh key. You can use git to connect to Bitbucket. Shell access is disabled