Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jenkins: what is the correct format for private key in Credentials

Tags:

I'm creating a job in Jenkins 2.152 running on Windows Server 2016 which needs to pull from a git repo hosted on bitbucket.org. I tested the ssh key through git-bash so I know it works and there is no passphrase. When I try to use the very same private key with Jenkins I get an error message.

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. 

The Credentials are set up as

 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 

I noticed that on another Windows Jenkins server the private key has a different number of characters per line

Does anybody know what is the expected format of Private Key in Jenkins Credentials? Or maybe there is something else that I could check.

Any help is greatly appreciated.

like image 985
Bart C Avatar asked Dec 05 '18 16:12

Bart C


People also ask

How do I add a private key in Jenkins?

Secret file - click the Choose file button next to the File field to select the secret file to upload to Jenkins. SSH Username with private key - specify the credentials Username, Private Key and optional Passphrase into their respective fields.


2 Answers

Check the version of Git for Windows that you are using: Starting 2.19.2, it comes with OpenSSH v7.9p1 (from 7.7 before)

And... openssh 7.8 just changed the default ssh-keygen format, from a classic PEM 64-chars, to an OPENSSH one 70 chars!

Only ssh-keygen -m PEM -t rsa -P "" -f afile would generate the old format (-m PEM)

ssh-keygen(1):

write OpenSSH format private keys by default instead of using OpenSSL's PEM format.

The OpenSSH format, supported in OpenSSH releases since 2014 and described in the PROTOCOL.key file in the source distribution, offers substantially better protection against offline password guessing and supports key comments in private keys.
If necessary, it is possible to write old PEM-style keys by adding "-m PEM" to ssh-keygen's arguments when generating or updating a key.

like image 82
VonC Avatar answered Sep 19 '22 13:09

VonC


I also got this error message and eventually found out that the Jenkins credential should be RSA secret key, not public key. Below is my steps for configuring Jenkins to clone from bitbucket:

  1. Add credential in Jenkins credentials
   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. Create a job and configure the repository path and credential as following:

enter image description here

like image 44
Houcheng Avatar answered Sep 18 '22 13:09

Houcheng