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

Bar*_*t C 10 git ssh bitbucket jenkins

我正在Windows Server 2016上运行的Jenkins 2.152中创建一个工作,需要从bitbucket.org上托管的git repo中提取.我通过git-bash测试了ssh密钥,所以我知道它有效并且没有密码短语.当我尝试使用与Jenkins完全相同的私钥时,我收到一条错误消息.

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.
Run Code Online (Sandbox Code Playgroud)

凭据设置为

 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
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助是极大的赞赏.

Von*_*onC 10

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

而且...... openssh 7.8只是将默认的ssh-keygen格式从经典的PEM 64-chars改为OPENSSH 70-chars!

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

ssh-keygen(1):

默认情况下编写OpenSSH格式私钥,而不是使用OpenSSL的PEM格式.

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

  • 解决了此评论的问题后,我意识到上一个密钥的标题为“ ----- BEGIN OPENSSH PRIVATE KEY -----”,而新密钥的标题为“ ----- BEGIN RSA PRIVATE KEY -----” ”。谢谢@VonC (2认同)
  • 不明白为什么我的钥匙不能用,谢谢! (2认同)

Hou*_*eng 7

我也收到了此错误消息,并最终发现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-----
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个作业,并配置存储库路径和凭据,如下所示:

在此处输入图片说明


Bar*_*t C 6

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

虽然这对许多人来说可能是常识,但我还是决定将解决方法放在下面。

这是我从 Bitbucket.org 中提取我的私人存储库的解决方法:

  1. 以运行 Jenkins 服务的用户身份登录到您的 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\

希望这可以帮助某人。


小智 5

因此,只需添加一个答案,将密钥从新的 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-----
Run Code Online (Sandbox Code Playgroud)

ssh-keygen -p 更改密码,但它不介意新密码与旧密码相同(甚至没有),并且在此过程中可以转换格式。