BitBucket es una plataforma de repositorios en el cloud, como git, que te permite mantener el control de versiones en el código fuente y que de forma gratuita te ofrece un espacio privado (a diferencia de git).

Darse de alta es un procedimiento muy sencillo que no vamos a cubrir aquí.
Lo que vamos a hacer es partir de una cuenta existente, y habilitar la conexión por SSH con un par de claves pública/privada para no tener que introducir en password cada vez que subimos cambios al repositorio o nos actualizamos del mismo.

Comprobar que tenemos SSH instalado

En primer lugar debemos comprobar que contamos con SSH (los S.O. modernos tipo UNIX traen el cliente instalado, pero está bien que nos aseguremos). Para ello, haremos lo siguiente en el terminal:

miusuario$ ssh -v

Si lo tenemos instalado, nos aparecerá la versión y los métodos de uso.
En caso contrario, lo primero que debemos hacer es instalarlo. En Debian sería:

 miusuario$ sudo apt-get install openssh-client

Crear una identidad por defecto

Lo primero será generar el par de claves, lo haremos con el siguiente comando:

miusuario$ ssh-keygen

Nos pedirá si queremos guardarlo en algún fichero en concreto (si damos intro nos lo guardará en el que ofrece como predeterminado: ~/.ssh/id_rsa)
También nos pedirá si queremos poderlo recuperar con una contraseña. Si damos intro (2 veces), podemos prescindir de la misma (no la necesitamos si vamos a usar la clave a través de un script, como es el caso).
Este procedimiento creará 2 claves:
  • id_rsa: clave privada
  • id_rsa.pub: clave pública (la que podemos compartir con BitBucket).
Podemos ver lo que se ha creado con el siguiente comando:

miusuario$ ls ~/.ssh

Iniciar ssh-agent y cargar las claves

(Nota: este paso no es necesario en OSX 10.6.8 o superior) 

Lo primero que haremos es comprobar si el agente ssh está corriendo. Para eso:

miusuario$ ps -e | grep [s]sh-agent


 Si no obtenemos ningún resultado, lo iniciamos manualmente con:

miusuario$ ssh-agent /bin/bash

Nos abrirá la linea de comandos de gestión del programa ssh-agent, donde introduciremos la referencia a la clave que hemos creado:
bash$ ssh-add ~/.ssh/id_rsa
Identity added: /Users/miusuario/.ssh/id_rsa (/Users/miusuario/.ssh/id_rsa)

 Podemos comprobar las claves que está manejando, con el siguiente comando:

bash$ ssh-add -l
2048 7a:9c:b2:9c:8e:4e:f4:af:de:70:77:b9:52:fd:44:97 /Users/miusuario/.ssh/id_rsa (RSA)



Habilitar compresión SSH para mercurial

Habilitar la compresión SSH para mercurial puede mejorar drásticamente la velocidad de las conexiones con el repositorio.
Debemos abrir el archivo de configuración global de mercurial (~/.hgrc), y añadir la siguiente línea:

ssh = ssh -C

De forma que debería quedarnos un archivo con un contenido similar a:

[ui]username = Mi Usuario
ssh = ssh -C 

Instalar la clave pública en mi repositorio de bitbucket

  1. Abrimos la web de bitbucket y abrimos el menú desplegable al lado del icono con forma de usuario (barra superior, lateral derecho).
  2. Seleccionamos Administrar cuenta
  3. Seleccionamos claves SSH en el menu lateral que ha aparecido
  4. Seleccionamos Añadir clave, le damos un nombre para identificarla, y pegamos el contenido del archivo de clave pública que hemos creado anteriormente
    1. Podemos ver el contenido a copiar con el siguiente comando:

      miusuario$
      cat ~/.ssh/id_rsa.pub 
    2. Una vez copiado el contenido, seleccionamos Add Key

Cambiar el protocolo del repositorio a SSH

En cada repositorio, acostumbramos a tener la ruta a la conexión (con el protocolo que se usa), codificado en el archivo .hg/hgrc. Si lo abrimos, veremos que tiene una pinta como esta:

miusuario$ vim miRepositorio/.hg/hgrc
[paths]default = https://bitbucket.org/miusuariobitbucket/mirepo

Como pretendemos conectarnos por SSH, deberemos modificarlo para que tenga el siguiente aspecto:
[paths]default = ssh://hg@bitbucket.org/miusuariobitbucket/mirepo

Conclusiones

Veremos que tras estos pasos, cuando ejecutemos el comando hg push, mercurial se autentificará directamente con nuestra clave privada y no necesitaremos introducir nuestro password.