Jenkins: ¿cuál es el formato correcto para la clave privada en Credenciales?

Resuelto Bart C asked hace 54 años • 0 respuestas

Estoy creando un trabajo en Jenkins 2.152 que se ejecuta en Windows Server 2016 y que debe extraerse de un repositorio de git alojado en bitbucket.org. Probé la clave ssh a través de git-bash para saber que funciona y que no hay una frase de contraseña. Cuando intento utilizar la misma clave privada con Jenkins, aparece un mensaje de error.

Failed to connect to repository : Command "git.exe ls-remote -h 
[email protected]:mygroup/myrepo HEAD" returned status code 128:
stdout: 
stderr: Load key 
"C:\\Users\\JE~1\\AppData\\Local\\Temp\\ssh2142299850576289882.key": invalid format 
[email protected]: Permission denied (publickey). 
fatal: Could not read from remote repository.

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

Las Credenciales están configuradas como

 scope: Global
 user: git
 Private Key -> Enter Directly -> copy and past - generated by ssh-keygen -t rsa in gitbash
 Passphrase: empty
 ID: empty
 description: bitbucket.org

Noté que en otro servidor Windows Jenkins la clave privada tiene una cantidad diferente de caracteres por línea.

¿Alguien sabe cuál es el formato esperado de clave privada en las credenciales de Jenkins? O tal vez haya algo más que pueda comprobar.

Cualquier ayuda es muy apreciada.

Bart C avatar Jan 01 '70 08:01 Bart C
Aceptado

Verifique la versión de Git para Windows que está utilizando: A partir de 2.19.2 , viene con OpenSSH v7.9p1 (desde 7.7 anterior)

Y... openssh 7.8 acaba de cambiar el formato ssh-keygen predeterminado, de un PEM clásico de 64 caracteres a un OPENSSH de 70 caracteres.

Sólo ssh-keygen -m PEM -t rsa -P "" -f afilegeneraría el formato antiguo ( -m PEM)

ssh-keygen(1):

escriba claves privadas en formato OpenSSH de forma predeterminada en lugar de utilizar el formato PEM de OpenSSL.

El formato OpenSSH, compatible con las versiones de OpenSSH desde 2014 y descrito en el PROTOCOL.keyarchivo de la distribución fuente, ofrece una protección sustancialmente mejor contra la adivinación de contraseñas sin conexión y admite comentarios clave en claves privadas.
Si es necesario, es posible escribir claves antiguas de estilo PEM agregando " -m PEM" a los argumentos de ssh-keygen al generar o actualizar una clave.

VonC avatar Dec 06 '2018 06:12 VonC

También recibí este mensaje de error y finalmente descubrí que la credencial de Jenkins debería ser una clave secreta RSA, no una clave pública. A continuación se detallan mis pasos para configurar Jenkins para clonar desde bitbucket:

  1. Agregar credencial en credenciales de Jenkins
   Kind: SSH username and private key
   Scope: Global
   Username: <my username in bitbucket>
   Private key: <Enter directly>
         -----BEGIN RSA PRIVATE KEY-----
         ......
         -----END RSA PRIVATE KEY-----
  1. Cree un trabajo y configure la ruta del repositorio y la credencial de la siguiente manera:

ingrese la descripción de la imagen aquí

Houcheng avatar Jan 29 '2019 10:01 Houcheng

Al final, no pude encontrar una manera de hacer que funcionara pegar claves privadas en las credenciales de Jenkins.

Si bien puede que sea de conocimiento común para muchos, decidí incluir la solución a continuación de todos modos.

Esto es lo que hice como solución alternativa para extraer mis repositorios privados de Bitbucket.org:

  1. Inicie sesión en su host de Windows como el usuario que ejecuta el servicio Jenkins. En mi caso, el servicio Jenkins se ejecuta como un usuario dedicado porque necesitaba acceder a recursos compartidos de red con privilegios de escritura restringidos únicamente a este usuario.
  2. Abra Git-bash y genere claves SSH con ssh-keygenun comando que acepte todos los valores predeterminados
  3. En Jenkins, ingrese la URL del repositorio de git como [email protected] :team_name/repo_name y deje las credenciales comoNone

De esta manera, Git y SSH podrán encontrar claves SSH en la ubicación predeterminada, que generalmente es c:\Users\username.ssh\

Espero que esto ayude a alguien.

Bart C avatar Dec 11 '2018 15:12 Bart C

Entonces, solo para agregar una respuesta para convertir una clave del nuevo formato OPENSSH al formato PEM anterior:

$ ssh-keygen -f blah.key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in blah.key.
Your public key has been saved in blah.key.pub.
The key fingerprint is:
SHA256:ndMFvZjbD7M3MoqFy8+me74gPhcuoDVLF2/Oh+hXQ8I [email protected]
$ head -n 1 blah.key
-----BEGIN OPENSSH PRIVATE KEY-----
$ ssh-keygen  -f blah.key -m PEM -p
Key has comment 'redacted'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.
$ head -n 1 blah.key
-----BEGIN RSA PRIVATE KEY-----

ssh-keygen -p cambia la frase de contraseña, pero no le importa que la nueva frase de contraseña sea la misma (incluso ninguna) que la anterior y en el proceso puede convertir el formato.

erpel avatar Apr 08 '2020 07:04 erpel

lo siguiente funcionó para mí

  1. Cree una carpeta (digamos testkey), cd dentro de la carpeta y haga clic derecho y seleccione git bash

  2. ahora cree la clave OPENSSH usando el siguiente comando en git bash. aquí test.key es el nombre de su clave OPENSSH (tenga en cuenta que la frase de contraseña es opcional)

ssh-keygen -f prueba.clave

  1. Copie esa clave de conexión, puede abrir la clave usando el bloc de notas y pegarla en github. Recuerde que Git solo acepta la clave OPENSSH.

ingrese la descripción de la imagen aquí

  1. Ahora convierta esa clave al formato PEM, usando la misma ventana bash, ejecute el siguiente comando (tenga en cuenta que la frase de contraseña es opcional)

ssh-keygen -f prueba-pem.key -m PEM -p

  1. Ahora la clave se convierte en clave PEM, copie el contenido de la clave usando el bloc de notas.

  2. Vaya a Jenkins -> Credenciales -> Agregar nuevas credenciales.

ingrese la descripción de la imagen aquí

7.Seleccione Tipo de nombre de usuario y clave SSH, Proporcione el nombre de usuario y pegue el contenido de la clave PEM copiado en el paso 5 y péguelo en la clave privada; tenga en cuenta que la frase de contraseña es opcional.

ingrese la descripción de la imagen aquí

  1. Ahora agregue repositorio para ssh como este,

Comando SSL original copiado de GITHUB - [email protected] :test/goto.git

change it to  - ssh://[email protected]/test/goto.git
exceed007 avatar Jul 31 '2020 08:07 exceed007