我正在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凭证中私钥的预期格式是什么吗?也许还有其他我可以检查的东西。
非常感谢您的帮助。
答案 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克隆的步骤:
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-----
答案 3 :(得分:1)
最后,我找不到一种可以将私钥粘贴到Jenkins凭据的方法。
尽管这可能是许多人的常识,但我还是决定将解决方法放在下面。
这是我作为一种解决方法从Bitbucket.org提取我的私有存储库的操作:
ssh-keygen
命令生成SSH密钥None
这样,Git和SSH将能够在默认位置找到SSH密钥,该位置通常为c:\ Users \ username.ssh \
希望这对某人有帮助。
答案 4 :(得分:0)
我以某种方式使它再次工作,但解决该问题的实际步骤尚不清楚。
我要做的是再次重新生成ssh密钥,并将所有内容放到其默认位置。重新上传公钥,替换凭证中的私钥,然后开始工作。
答案 5 :(得分:0)
以下为我工作
创建一个文件夹(例如testkey),在该文件夹中cd,然后右键单击并选择git bash
现在使用git bash中的以下命令创建OPENSSH密钥。这里的test.key是您的OPENSSH密钥的名称(请注意密码是可选的)
ssh-keygen -f test.key
ssh-keygen -f test-pem.key -m PEM -p
现在将密钥转换为PEM密钥,使用记事本复制密钥的内容。
Go Jenkins->凭据->添加新凭据。
7。选择Kind SSH Username and Key(类型SSH用户名和密钥),提供用户名,然后粘贴在步骤5中复制的PEM密钥内容并粘贴到私钥中,请注意密码是可选的。
从GITHUB复制的原始SSL命令-git@github.com:test / goto.git
change it to - ssh://git@github.com/test/goto.git