Gitlab: ssh, keys rsa y gpg

Imagen destacada de Gitlab: ssh, keys rsa y gpg

Habiendo dado de alta nuestro usuario, tanto en una instancia local de Gitlab como en gitlab.com, el proceso es el mismo.

Certificados RSA

Para trabajar con git mediante certificados ssh, lo primero que deberemos hacer sera crear los certificados.

En mi caso trabajo en Debian GNU/Linux y es el método sobre el que escribiré. Mi preferencia es la de crear certificados por usuario y sitio e intentar evitar la reutilización de certificados, pero al fin y al cabo para gustos los colores.

Desde la terminal y con nuestro usuario de trabajo, realizaremos los siguientes pasos:

Confirmación de ssh-agent corriendo en el sistema:

eval $(ssh-agent -s)

Creación del directorio especifico donde irán los certificados y desplazamiento al directorio en cuestión. Una vez dentro crearemos los nuevos certificados de tipo RSA.

mkdir -p ~/.ssh/gitlab.company.com && cd ~/.ssh/gitlab.company.com
ssh-keygen -t rsa -b 2048 -C "[email protected]"

Nos creara dos certificados uno privado y otro publico. Ahora añadiremos la key privada a nuestro agente ssh.

ssh-add ~/.ssh/gitlab.company.com

Crearemos un fichero en ‘~/.ssh/config’ con el siguiente contenido para decirle al agente que certificado usar con que servidor.

# ejemplo con mismo nombre de usuario
# GitLab.com
Host gitlab.com
Preferredauthentications publickey
IdentityFile ~/.ssh/gitlab.company.com

# con instancia privada de gitlab
Host gitlab.company.com
Preferredauthentications publickey
IdentityFile ~/.ssh/gitlab.company.com
# ejemplo con diferente nombre de usuario
# GitLab.com
Host usuario.gitlab.com
Hostname gitlab.com
Preferredauthentications publickey
IdentityFile ~/.ssh/gitlab_com_rsa

# con instancia privada de gitlab
Host usuario.gitlab.company.com
Hostname gitlab.company.com
Preferredauthentications publickey
IdentityFile ~/.ssh/example_com_rsa

Copiamos la clave publica que hemos creado y la añadimos a nuestro usuario desde el panel de control del mismo en gitlab. Una vez hecho testeamos con:

ssh -T [email protected]

# ó

ssh -T git@gitlab.company.com

Si pasa el test correctamente, ya podríamos trabajar a través de ssh utilizando la siguiente sintaxis de ejemplo:

git remote add origin [email protected]:usuario/nombre-repositorio.git

Firmar commits con GPG

Creamos los certificados con el siguiente comando, respondiendo todo por defecto, excepto los datos personales y la longitud de la clave que la fijaremos en 4096:

gpg --full-gen-key

Ahora buscaremos el id asociado a la clave:

gpg --list-secret-keys --keyid-format LONG [email protected]

Buscaremos la linea que comienza por ‘sec’ y copiaremos los números que siguen a ‘rsa4096/’ pero sin la fecha.

Exportaremos la clave publica con el siguiente comando cuya salida sera la que copiemos en su apartado de nuestra cuenta de gitlab.

gpg --armor --export id-anterior

Ese mismo id lo utilizaremos también para asociarlo a nuestro git y así poder utilizar la firma.

git config --global user.signingkey id-anterior

Ahora utilizaríamos la bandera ‘-S’ en cada commit pero si preferimos podemos decirle a git que lo haga siempre con:

git config --global commit.gpgsign true

Listo ahora cada commit que hagamos sera firmado y reconocido por gitlab como verificado.

Para más info visitar su maravillosa documentación.

Saludos.