Jenkins 通过 ssh 发布显示错误“jenkins.plugins.publish_over.BapPublisherException:无法添加 SSH 密钥。”

Posted

技术标签:

【中文标题】Jenkins 通过 ssh 发布显示错误“jenkins.plugins.publish_over.BapPublisherException:无法添加 SSH 密钥。”【英文标题】:Jenkins publish over ssh shows error "jenkins.plugins.publish_over.BapPublisherException: Failed to add SSH key." 【发布时间】:2019-10-25 12:36:34 【问题描述】:

为了使用 ssh 将 jenkins 与远程服务器连接,我在 jenkins 中安装了 publish over SSH 插件。但配置后它显示错误 jenkins.plugins.publish_over.BapPublisherException: Failed to add SSH key。消息[无效的私钥:[B@7934add]

最初我在服务器中以 jenkins 用户身份登录为“sudo su jenkins” 在此之后,我输入“ssh-keygen”并给出密码短语值并给出 jenkins 配置中的密钥路径。

我的密码是我在创建 ssh-keygen 时给出的值

我的密码短语/密码与我在创建 ssh-keygen 时给出的值相同。我对这一点不正确

但是当我点击测试配置按钮时我的所有配置都显示“

Failed to connect or change directory

jenkins.plugins.publish_over.BapPublisherException: Failed to add SSH key. Message [invalid privatekey: [B@3085b39b]"

【问题讨论】:

【参考方案1】:

key的路径应该是privatekeyid_rsa的路径。

不是公开的id_rsa.pub(确实是无效的...私钥)

创建 SSH 密钥对已生成:

/var/lib/jenkins/.ssh/id_rsa(私钥) /var/lib/jenkins/.ssh/id_rsa.pub(公钥)

使用old PEM format(不是新的 OpenSSH)

ssh-keygen -t rsa -C "jenkins" -m PEM -P "" -f /var/lib/jenkins/.ssh/id_rsa

要打开 SSH 会话,需要将公钥复制到远程服务器,地址为 /home/ubuntu/.ssh/authorized_keys。 如果你有远程ubuntu用户密码,可以使用ssh-copy-id command,如seen here:

ssh-copy-id -i /var/lib/jenkins/.ssh/id_rsa ubuntu@remoteserverip

然后你可以测试sudo su jenkinsssh -Tv ubuntu@remoteserverip的连接

【讨论】:

感谢您的回复。我更改了它,但现在它显示 jenkins.plugins.publish_over.BapPublisherException: 无法连接和初始化 SSH 连接。消息:[无法连接配置 [connectionName] 的会话。消息[验证失败]] 我应该在 SSH 服务器密码/密码字段中提供什么? @Prakash 作为sudo su jenkins,你能试试:ssh -Tv ubuntu@serveripaddress吗? serveripaddress 上的远程服务器应该有一个 /home/ubuntu/.ssh/authorized_keys 文件,其中包含您的公钥,以便所述 ssh 会话正常工作。 @Prakash 如果您创建了带有密码的私人密钥,您应该在该字段中提供该密码。 当我作为 jenkins 用户“ssh -Tv ubuntu@serveripaddress”发出这个命令时,它显示权限被拒绝。【参考方案2】:

MacOS 似乎使用更新的技术来生成密钥。

使用-m PEM 生成密钥为我解决了这个问题。

完整的电话是:ssh-keygen -t rsa -b 4096 -m PEM,然后按照 Prakash 所说的步骤进行操作。

Source

【讨论】:

当我改成上面提到的密钥生成命令时,我得到了成功。【参考方案3】:

您需要在 Jenkins 服务器上以 Jenkins 用户的身份创建一个公钥/私钥,然后将公钥复制到您想要在目标服务器上进行部署的用户。

第一步,以用户jenkins在构建服务器上生成公钥和私钥

build1:~ jenkins$ whoami
jenkins
build1:~ jenkins$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa): 
Created directory '/var/lib/jenkins/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/lib/jenkins/.ssh/id_rsa.
Your public key has been saved in /var/lib/jenkins/.ssh/id_rsa.pub.
The key fingerprint is:
[...] 
The key's randomart image is:
[...]
build1:~ jenkins$ ls -l .ssh
total 2
-rw-------  1 jenkins  jenkins  1679 Feb 28 11:55 id_rsa
-rw-r--r--  1 jenkins  jenkins   411 Feb 28 11:55 id_rsa.pub 
build1:~ jenkins$ cat .ssh/id_rsa.pub
ssh-rsa AAAlskdjfalskdfjaslkdjf... jenkins@myserver.com

第 2 步,将 pub 文件内容粘贴到目标服务器上。

target:~ bob$ cd .ssh
target:~ bob$ vi authorized_keys (paste in the stuff which was output above.)
Make sure your .ssh dir has permissoins 700 and your authorized_keys file has permissions 644

第三步,配置Jenkins

In the jenkins web control panel, nagivate to "Manage Jenkins" -> "Configure System" -> "Publish over SSH"
Either enter the path of the file e.g. "var/lib/jenkins/.ssh/id_rsa", or paste in the same content as on the target server.
Enter your passphrase, server and user details, and you are good to go!

【讨论】:

以上是关于Jenkins 通过 ssh 发布显示错误“jenkins.plugins.publish_over.BapPublisherException:无法添加 SSH 密钥。”的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins SSH 服务器在尝试通过 SSH 插件进行设置时显示错误算法协商失败

Jenkins 通过 SSH 发布无法更改到远程目录

jenkins+git详细配置及使用方法,为啥提示错误

Okta 无法访问 jenkins 服务器

Jenkins - 通过 SSH 插件发布:如何复制目录

Jenkins系统上的时间不正确问题