martes, 18 de octubre de 2016

[Bitbucket] Configurar multiples identidades SSH en Linux


Toda la información reproducida se puede encontrar en la sección Configure multiple SSH identities for GitBash, Mac OSX, & Linux de la documentación  de Bitbucket.
https://confluence.atlassian.com/bitbucket/configure-multiple-ssh-identities-for-gitbash-mac-osx-linux-271943168.html

Paso 1: Crear una identidad

Para crear una nueva identidad vamos a utilizar el comando: ssh-keygen.

En el siguiente ejemplo la identidad se va a llamar red-ribon-c18-project: 
ssh-keygen -f ~/.ssh/red-ribon-c18-project -C "red-ribon-c18-project"
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/eltortuganegra/.ssh/red-ribon-c18-project.
Your public key has been saved in /home/eltortuganegra/.ssh/red-ribon-c18-project.pub.
The key fingerprint is:
f8:54:08:6f:6f:d4:59:73:45:b1:4d:df:49:f5:aa:10 red-ribon-c18-project
The key's randomart image is:
+---[RSA 2048]----+
|      .       o+X|
|       o . . o.+B|
|        + E o  o=|
|       o + .   . |
|      . S +   .  |
|       o . . .   |
|        .   .    |
|                 |
|                 |
+-----------------

Podemos comprobar que la clave se ha creado correctamente:
ls -lah ~/.ssh
-rw-------  1 eltortuganegra eltortuganegra 1.7K Oct 18 13:37 red-ribon-c18-project
-rw-r--r--  1 eltortuganegra eltortuganegra  403 Oct 18 13:37 red-ribon-c18-project.pub
  

Con este procedimiento podemos crear tantas identidades como necesitemos.

Paso 2: guardar la key en Bitbucket

Para poder acceder a esta funcionalidad hay que tener los permisos suficientes. Una vez logados en Bitbucket y seleccionado el proyecto objetivo hay que ir a la sección de "settings" y allí buscar en el submenú "deployment keys".

Aquí podremos ver la página de "deployment keys" y tendremos la posibilidad de añadir nuevas.

Para añadir una nueva pinchamos el botón "add key" y rellenamos el formulario con un nombre descriptivo y con el contenido de la "key.pub". 

Paso 3: crear un fichero de configuración SSH

El fichero de configuración va contener la configuración las identidades a las cuales las podemos definir un alias. El fichero de configuración se encuentra en:
~/.ssh/config
En el caso de que no exista se crea con un editor de texto.
Aunque las opciones de configuración son varias, en este ejemplo se va a utilizar la siguiente plantilla:
Host alias
HostName bitbucket.org
IdentityFile ~/.ssh/identity
Por lo que en nuestro ejemplo la configuración quedaría:
Host red-ribon-c18-project
HostName bitbucket.org
IdentityFile ~/.ssh/red-ribon-c18-project
 En el caso de tener más de una identidad esta se añade al fichero. En el ejemplo:
Host red-ribon-c18-project
HostName bitbucket.org
IdentityFile ~/.ssh/red-ribon-c18-project

Host red-ribon-c17-project
HostName bitbucket.org
IdentityFile ~/.ssh/red-ribon-c17-project

Paso 4: configurar el repositorio de git

Una vez creada la clave de la identidad hay que configurar el repositorio para que utilice esta clave. Para ello hay que editar el archivo:
/path/project/.git/config
Si el proyecto estuviera ubicado en:

/var/www/c18
Tendriamos que editar el archivo:
/var/www/c18/.config/config

Bitbucket dispone de varias maneras de identificar la url del repositorio por lo que, dentro del archivo, hay que sustituir la variable url por el siguiente formato:
url = git@alias:<accountname>/<reponame>.git

Por lo que si el projecto se encuentra en la cuenta "red-ribon"  y el projecto es c18" la url quedaría:
url = git@red-ribon-c18-project:red-ribon/c18.git
Nota: ojo a los ":" que pueden dar algún quebradero de cabeza (true history).