Jenkins:凭据中私钥的正确格式是什么

时间:2018-12-05 16:20:53

标签: git jenkins ssh bitbucket

我正在Windows Server 2016上运行的Jenkins 2.152中创建作业,该作业需要从bitbucket.org上托管的git存储库中提取。 我通过git-bash测试了ssh密钥,因此我知道它可以正常工作并且没有密码短语。 当我尝试对Jenkins使用完全相同的私钥时,会收到错误消息。

SELECT * FROM D061_WORDS;
nikhil sugandh
punam sugandh
mohit sugandh
select regexp_replace(a,'(.)* {1}',','||'sugandh') from d061_WORDS;
,sugandhsugandh
,sugandhsugandh
,sugandhsugandh

凭据设置为

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

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

我注意到在另一台Windows Jenkins服务器上,私钥每行具有不同数量的字符

有人知道Jenkins凭证中私钥的预期格式是什么吗?也许还有其他我可以检查的东西。

非常感谢您的帮助。

6 个答案:

答案 0 :(得分:6)

检查您使用的Windows Git版本:Starting 2.19.2,它随附OpenSSH v7.9p1(从7.7之前的版本开始)

然后... openssh 7.8刚刚将默认的ssh-keygen格式从经典的PEM 64字符更改为OPENSSH的70字符!

只有ssh-keygen -m PEM -t rsa -P "" -f afile会生成旧格式(-m PEM

  

ssh-keygen(1)

     

默认情况下写入OpenSSH格式的私钥,而不使用OpenSSL的PEM格式。

     

OpenSSH格式自2014年以来受OpenSSH支持,并在源代码发行版的PROTOCOL.key文件中进行了描述,它提供了更好的防止离线密码猜测的保护,并支持私钥中的键注释。
  如有必要,可以在生成或更新密钥时通过在ssh-keygen的参数中添加“ -m PEM”来编写旧的PEM样式的密钥。

答案 1 :(得分:4)

因此,只需添加一个答案即可将密钥从新的OPENSSH格式实际转换为旧的PEM格式:

$ 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 perbelding@erpelbook4.local
$ 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更改了密码,但是它不介意新密码与旧密码相同(甚至没有),并且在此过程中可以转换格式。

答案 2 :(得分:2)

我也收到了此错误消息,并最终发现Jenkins凭证应该是RSA密钥,而不是公用密钥。以下是我配置Jenkins从bitbucket克隆的步骤:

  1. 在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. 创建作业并按以下方式配置存储库路径和凭据:

enter image description here

答案 3 :(得分:1)

最后,我找不到一种可以将私钥粘贴到Jenkins凭据的方法。

尽管这可能是许多人的常识,但我还是决定将解决方法放在下面。

这是我作为一种解决方法从Bitbucket.org提取我的私有存储库的操作:

  1. 以运行Jenkins Service的用户身份登录Windows主机。就我而言,Jenkins服务以专用用户身份运行,因为我需要使用仅限于该用户的写权限访问网络共享。
  2. 打开Git-bash并使用接受所有默认设置的ssh-keygen命令生成SSH密钥
  3. 在Jenkins中,将git repo URL输入为git@bitbucket.org:team_name / repo_name,并将凭据保留为None

这样,Git和SSH将能够在默认位置找到SSH密钥,该位置通常为c:\ Users \ username.ssh \

希望这对某人有帮助。

答案 4 :(得分:0)

我以某种方式使它再次工作,但解决该问题的实际步骤尚不清楚。

我要做的是再次重新生成ssh密钥,并将所有内容放到其默认位置。重新上传公钥,替换凭证中的私钥,然后开始工作。

答案 5 :(得分:0)

以下为我工作

  1. 创建一个文件夹(例如testkey),在该文件夹中cd,然后右键单击并选择git bash

  2. 现在使用git bash中的以下命令创建OPENSSH密钥。这里的test.key是您的OPENSSH密钥的名称(请注意密码是可选的)

ssh-keygen -f test.key

  1. 复制该密钥连接,您可以使用记事本打开密钥,然后将该密钥粘贴到github中。请记住,Git仅接受OPENSSH密钥。

enter image description here

  1. 现在使用相同的bash窗口将该密钥转换为PEM格式,运行以下命令(请注意,密码是可选的)

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

  1. 现在将密钥转换为PEM密钥,使用记事本复制密钥的内容。

  2. Go Jenkins->凭据->添加新凭据。

enter image description here

7。选择Kind SSH Username and Key(类型SSH用户名和密钥),提供用户名,然后粘贴在步骤5中复制的PEM密钥内容并粘贴到私钥中,请注意密码是可选的。

enter image description here

  1. 现在像这样为ssh添加存储库,

从GITHUB复制的原始SSL命令-git@github.com:test / goto.git

change it to  - ssh://git@github.com/test/goto.git