Configurar SSH para usar diferentes pares de claves con bitbucket y otros servicios git

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. 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

REFERENCIAS

  1. Set up an SSH key
  2. SSH config file for OpenSSH client

Deja un comentario

Tu dirección de correo electrónico no será publicada.

This site uses Akismet to reduce spam. Learn how your comment data is processed.