Usar Ansible con BitBucket para los deploys

Hacer subidas a producción a veces es un peñazo. Sobre todo si no tienes uno de esos maravillosos «pipelines».

Una de las tareas comunes es conectarse al servidor, ir a la carpeta del proyecto, hacer un git pull y meter la contraseña.

Generar la llave SSH

Una llave SSH es lo que usamos para conectarnos a un servidor sin necesidad de una contraseña.

La llave SSH tiene dos partes:

  • La pública: Este es un fichero con extensión «.pub» que puedes compartir sin problema.
  • La privada: Este es un fichero sin extensión que no deberías compartir nunca jamás de los jamases. Si alguien se hace con la llave privada ya tiene acceso a todo lo que uses con ella.

Para generarla usa el siguiente comando:

ssh-keygen -t ed25519 -b 256 Enter file in which to save the key (/home/gorka/.ssh/id_ed25519): /home/gorka/.ssh/id_llave_solo_lectura

Donde:

  • /home/gorka/.ssh/id_llave_solo_lectura es la ruta donde quieres que se guarde la llave SSH que vas a crear.

NOTA: No tengo que decir que en lugar de «/home/gorka» debes poner la ruta de tu equipo ¿verdad?

Copiar la llave SSH generada a BitBucket

Entrar en el repositorio al que queremos añadirle una llave SSH.

Hacer click en «Repository settings» y luego seleccionar «Access keys»:

Click en el botón «Add key».

En el campo «Label» ponemos algo que nos permita añadir esta llave que estamos añadiendo.

En el campo «Key» ponemos la llave pública (el contenido tu fichero equivalente a /home/gorka/.ssh/id_llave_solo_lectura.pub).

El contenido de este fichero puedes sacarlo con el comando:

cat ~/.ssh/id_llave_solo_lectura.pub

O puedes abrir el fichero de la llave pública y copiarlo, lo que prefieras.

Copiar la llave SSH en tu servidor

El siguiente paso es añadir las llaves ssh que has creado a tu servidor.

Una forma de hacerlo es mediante el comando scp:

scp /home/gorka/.ssh/id_llave_solo_lectura.* gorka@ip_de_tu_servidor:/home/gorka/.ssh

Editar el fichero .ssh/config

Para conectarnos a BitBucket necesitaremos esta llave que acabamos de subir. Para eso edita el fichero .ssh/config para especificar que queremos usar esta clave al conectarnos a BitBucket:

Host bitbucket.org AddKeysToAgent yes IdentityFile ~/.ssh/id_llave_solo_lectura


Donde:

  • IdentityFile es la ruta de la llave privada de la llave SSH.

Prueba que todo funciona

Primero comprueba que te puedes conectar a BitBucket:

ssh -T git@bitbucket.org

Esto debería decirte algo como:

authenticated via ssh key.

Ve a la carpeta de tu proyecto y prueba a hacer:

git pull

Si todo va bien se conectará.

Crear la tarea Ansible

Ya solo quedaría añadir la tarea Ansible así:

tasks:

– name: Git pull using a cerrtain private key git: repo: «git@bitbucket.org:usuario/mi-repo.git» dest: «/var/www/tu-carpeta» accept_hostkey: yes force: yes update: yes key_file: «/home/gorka/.ssh/id_llave_solo_lectura»

Donde:

  • repo es lo que usarías para conectarte a BitBucket a través de SSH.
  • dest: es la carpeta donde está tu proyecto.
  • key_file: la llave SSH que hemos creado.

Leave a Comment