Crear clave RSA para jenkins y Gitlab

Tiempo de lectura: 2 minutos

Te explico cómo añadir una clave RSA en Jenkins para autenticarte con GitLab:

1. Generar el par de claves RSA

En el servidor de Jenkins (o tu máquina local), ejecuta:

bash

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Guarda las claves, por ejemplo en ~/.ssh/id_rsa_jenkins.

2. Añadir la clave pública en GitLab

  1. Copia el contenido de la clave pública (id_rsa_jenkins.pub)
  2. Ve a GitLab → User SettingsSSH Keys
  3. Elige autenticación y firma.
  4. Elige si quieres que tenga caducidad.
  5. Pega la clave pública y guarda

3. Añadir la clave privada en Jenkins

  1. Ve a JenkinsManage JenkinsCredentials https://URL_JENKINGS/manage/credentials/store/system/domain/_/
  2. Selecciona el dominio adecuado (ej. Global)
  3. Haz clic en Add Credentials
  4. Rellena el formulario:
    • Kind: SSH Username with private key
    • ID: un nombre identificativo (ej. gitlab-ssh-key)
    • Username: tu usuario de GitLab
    • Private Key: selecciona Enter directly y pega el contenido de id_rsa_jenkins (la clave privada)
  5. Haz clic en Create

4. Usar la credencial en un Job o Pipeline

En un Pipeline (Jenkinsfile):

groovy

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git credentialsId: 'gitlab-ssh-key',
                    url: '[email protected]:usuario/repositorio.git'
            }
        }
    }
}

En un Job freestyle:

  • Ve a la configuración del job
  • En Source Code ManagementGit
  • Introduce la URL SSH del repo ([email protected]:...)
  • En Credentials, selecciona la clave que creaste

5. Verificar la conexión (opcional)

En el servidor Jenkins puedes probar la conexión manualmente:

bash

ssh -i ~/.ssh/id_rsa_jenkins -T [email protected]

Deberías ver un mensaje de bienvenida de GitLab si todo está correcto.

Si aparece error:

 returned status code 128:
stdout:
stderr: No ED25519 host key is known for gitlab.com and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Opción 1: Desde el servidor Jenkins (recomendada)

Conéctate al servidor/contenedor de Jenkins y ejecuta como el usuario jenkins:

bash

# Cambiar al usuario jenkins
sudo su -s /bin/bash jenkins

# Añadir gitlab.com a known_hosts
ssh-keyscan -t rsa,ecdsa,ed25519 gitlab.com >> ~/.ssh/known_hosts

# Verificar que se añadió
cat ~/.ssh/known_hosts | grep gitlab.com

Opción 2: Desde la configuración de Jenkins (sin acceso al servidor)

  1. Ve a Manage JenkinsSecurityGit Host Key Verification Configuration
  2. En Host Key Verification Strategy, selecciona:
    • Manually provided keys → pega la salida de:
     ssh-keyscan gitlab.com
  • O (menos seguro) No verification → solo para pruebas

Opción 3: Si usas Jenkins en Docker

bash

docker exec -u jenkins <container_id> ssh-keyscan -t rsa,ecdsa,ed25519 gitlab.com >> /var/jenkins_home/.ssh/known_hosts

Verificar que funciona

Prueba la conexión desde el usuario jenkins:

bash

sudo su -s /bin/bash jenkins
ssh -T [email protected]

Deberías ver:

Welcome to GitLab, @your_user!

¿Por qué ocurre esto? SSH tiene verificación estricta de hosts por defecto. Si gitlab.com no está en known_hosts, rechaza la conexión aunque tu clave RSA sea correcta. El ssh-keyscan simplemente pre-aprueba el fingerprint de GitLab.

Deja un comentario