Jenkins Publish over ssh 身份验证失败,使用私钥

Posted

技术标签:

【中文标题】Jenkins Publish over ssh 身份验证失败,使用私钥【英文标题】:Jenkins Publish over ssh authentification failed with private key 【发布时间】:2014-04-16 05:32:51 【问题描述】:

我可以使用我的private key 和密码在服务器上通过putty 成功进行身份验证。但是,当我尝试使用 jenkins publish over SSH 插件(使用测试进行配置)时,我收到以下错误消息:

jenkins.plugins.publish_over.BapPublisherException: Failed to connect session for config myconfig. Message [Auth fail]

我输入了和putty一样的信息:

主机名:我的主机名用户名:我的用户名远程目录使用密码身份验证,或使用不同的密钥 Passphrase / Password 密钥路径:选中 密钥路径:mypath 密码:mypasssword 密钥端口:22超时(毫秒):300000

如果你有任何想法... 感谢您的帮助。

【问题讨论】:

Jenkins 插件指南指出,检查选项“使用密码身份验证,或使用不同的密钥密码短语/密钥的密码路径”使另外三个字段能够为“密钥路径”提供详细信息, “key”和“Passphrase”……我在上面的信息中没有看到密码,你在那个框中也提供了密码吗? 在下面的答案中添加了更多详细信息 对不起,我也输入了密码,但我在我的问题中忘记了它。事实上,我输入的信息与 putty 中的信息完全相同。我真的不明白这个问题! 我遇到了同样的问题... 我还没有找到分辨率:-( 【参考方案1】:

看起来您正在使用密钥文件身份验证,因此如果您没有在 .ssh 文件夹和/或 ~/.ssh/authorized_keys 文件上正确设置权限,您将从 Jenkins 收到此错误。

.ssh 文件夹应具有drwx------ 权限(仅限读/写/执行所有者) authorized_keys 文件应具有-rw------- 权限(仅限读/写所有者)

修复它:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

【讨论】:

我遇到了这个错误jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection. Message: [Failed to connect session for config [deploy-server]. Message [Auth fail]] 还有什么我需要注意的吗?我在部署服务器中有 jenkins 用户,我可以通过 putty ssh 使用它。 在我的系统中,权限是正确的,但问题仍然存在。我使用私钥进行身份验证,这解决了它:cat id_rsa.pub >> authorized_keys【参考方案2】:

我今天遇到了同样的问题,结果发现我不小心提供了公钥而不是私钥的路径。

所以“钥匙的路径”应该是这样的

.ssh/id_rsa

而不是

.ssh/id_rsa.pub

【讨论】:

啊啊啊,同样的错误。谢谢! @Rinda 你在哪里提供这个,这个答案今天仍然有效吗? 如果我使用的是 jenkins docker 镜像,我如何知道私钥的路径?【参考方案3】:

因为你的linux登录需要密码,所以答案是:

 1. Passphrase: your passphrase
 2. path to key: your private key path
 3. key : blank
 4. Disable exec : un-check

SSH 服务器

1. Name: remote_user@remotehost.com
 2. hostname: remotehost.com
 3. Username: remote_user
 4. Remote Directory: empty

高级 --

5. check the box "use passsword authentication, or use a different key"
    `important`

 6. Passphrase / Password: your linux login password`important`

 7. path to key: blank

 8. key:blank

 9. port: 22

 10. Timeout(ms): 300000

'测试配置' 成功

【讨论】:

非常感谢。这对我帮助很大。【参考方案4】:

检查公钥是否在目标服务器上的.ssh/authorized_keys文件中,即使目标服务器与jenkins服务器相同。我可能遇到了同样的问题,结果证明我需要这个,即使 ssh localhost 工作正常。

(附录:还要检查 jenkins 服务器的 .ssh/known_hosts 文件中是否有目标服务器,因为这也会影响这一点。)

【讨论】:

.ssh/known_hosts 在我的情况下创建了问题。从known_host 中删除指纹解决了这个问题【参考方案5】:

我认为这是一个身份验证问题:

使用密码验证,或使用不同的密钥 选择此选项将生成另外 3 个配置框,这些配置框反映了 Jenkins SSH 密钥可用的选项。

密码/密码 如果配置了密钥路径或密钥,则这是与加密密钥一起使用的密码。 如果没有配置密钥,那么这就是将用于密码验证的密码。

键的路径 见上面的描述。

见上面的描述。

禁用执行 此选项将删除使用此配置执行命令的能力。

LINK HERE

【讨论】:

感谢您的回答,但我确实提供了与 putty 完全相同的信息,但它在 jenkins 中不起作用【参考方案6】:

我面临同样的问题,以下步骤对我有用:-(我使用的是 jenkins 1.57)

    转到 http:///jenkins/manage
      配置系统 浏览到通过 SSH 发布部分 密码:空白 密钥路径:空白 键:空白 禁用 exec:取消选中 SSH 服务器 -- 名称:remote_user@remotehost.com -- 主机名:remotehost.com -- 用户名:remote_user -- 远程目录:空 - 先进的 -- 勾选“使用密码验证,或使用不同的密钥” -- 端口:22 -- 超时(毫秒):300000 -- '测试配置'

成功

【讨论】:

【参考方案7】:

尝试重启远程服务器的ssh

        /etc/init.d/sshd restart

【讨论】:

【参考方案8】:

不要做任何 ssh-keygen。只需在关键字段下输入 pem 密钥详细信息, 添加 SSH 服务器详细信息:名称、主机名和用户名作为 ec2-user。 点击测试连接即可。

【讨论】:

【参考方案9】:

如果目标服务器没有足够的磁盘空间来执行 PUT 操作,有时 SSH 连接会失败

ERROR: Exception when publishing, exception message [Failure]

确保验证目标服务器有足够的磁盘空间。

如果是 Linux,您可以使用 'df -kh /directoryname' 检查磁盘空间

【讨论】:

【参考方案10】:

只需将 jenkins-user 的 id_rsa.pub 复制到远程主机上 ~/.ssh/authorized_keys 的末尾即可。

【讨论】:

【参考方案11】:

我今天遇到了同样的问题,我想我会分享对我有用的方法

通常当我通过 SSH 连接到我的 ec2 实例时,AWS 喜欢的用户名是

ubuntu@[ip address/url]

Jenkins 喜欢它只是用户名,所以删除其余的

ubuntu

【讨论】:

以上是关于Jenkins Publish over ssh 身份验证失败,使用私钥的主要内容,如果未能解决你的问题,请参考以下文章

jenkins无法正常安装publish-over-ssh

publish over ssh为啥不上传

publish over ssh

Jenkins——应用篇——插件使用——Publish over SSH

jenkins插件--publish over ssh

大坑,jenkins 配置publish over ssh bash 插件,远程部署,无法执行shell脚本