Jenkins通过ssh发布失败,私钥认证失败。

9

我可以使用我的私钥和密码验证成功地在服务器上使用 putty,但是当我尝试使用 Jenkins 的 Publish Over SSH 插件(使用“测试配置”)时,我会收到以下错误消息:

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

我输入了与putty相同的信息:

主机名: myhostname
用户名: myusername
远程目录:

使用密码身份验证,或使用不同的密钥密码短语/密码 密钥路径: 已选中
密钥路径: mypath
密码短语: mypasssword
密钥:
端口: 22
超时时间(毫秒): 300000

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


Jenkins插件指南指出,勾选“使用密码身份验证”或“使用不同的密钥密码/密码路径”选项会启用三个进一步的字段来提供有关“密钥路径”,“密钥”和“密码”的详细信息...我在上面的信息中没有看到密码短语,您是否也在该框中提供了您的密码? - AltF4_
下面的答案添加了更多细节。 - AltF4_
抱歉,我在问题中也放了密码,但我忘记了。实际上,我放了与putty中完全相同的信息。我真的不明白问题出在哪里! - Corinne Kubler
我遇到了相同的问题... - Michael Wiles
我还没有找到解决方案 :-( - Corinne Kubler
请查看 GitHub 上的此问题:https://github.com/jenkinsci/publish-over-ssh-plugin/issues/247 - ZhekaKozlov
13个回答

18

看起来您正在使用密钥文件认证,因此如果您没有正确设置.ssh文件夹和/或~/.ssh/authorized_keys文件的权限,Jenkins将会出现这个错误。

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

要解决此问题,请按以下步骤操作:

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

4
我遇到了这个错误 jenkins.plugins.publish_over.BapPublisherException: 连接和初始化SSH连接失败。信息:[Failed to connect session for config [deploy-server]. Message [Auth fail]],我需要注意其他什么事情吗? 在部署服务器上我有一个 Jenkins 用户,我可以通过 Putty 使用 ssh 进行连接。 - The_ehT
在我的系统中,权限是正确的,但问题仍然存在。我正在使用私钥进行身份验证,这解决了它:cat id_rsa.pub >> authorized_keys - lycanthrope10100
@inanutshellus ~/.ssh/authorized_keys 用于允许在安装了Jenkins的操作系统上进行ssh连接。它包含了公钥。为什么Jenkins插件需要访问这个文件呢? - undefined

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

所以,“密钥路径”应该是这样的:

.ssh/id_rsa

替代

.ssh/id_rsa.pub

啊,这里也犯了同样的错误。谢谢! - sbrattla
@Rinda,你在哪里提供这个答案?这个答案是否依然适用于今天? - shan
如果我正在使用Jenkins Docker镜像,如何知道私钥的路径? - Youssef Boudaya
请问,我对 Jenkins 的配置部分还比较陌生,想问一个问题。“私钥”是指 AWS EC2 实例的私钥,可以在 SSH 登录实例时找到吗?还是指你自己电脑上的私钥?举个例子,我是 Mac 用户。 - Emmanuel Spencer Egbuniwe

3
由于您的 Linux 登录需要密码,答案是:
 1. Passphrase: your passphrase
 2. path to key: your private key path
 3. key : blank
 4. Disable exec : un-check

SSH Servers

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

'测试配置' 成功


非常感谢。它对我帮助很大。 - Pramod

2

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

(附加说明:还要检查jenkins服务器是否在其.ssh/known_hosts文件中具有目标服务器,因为这也会影响此操作。)


.ssh/known_hosts” 在我的情况下造成了问题。将“known_hosts”中的指纹删除解决了这个问题。 - anand

1
我认为这是一个身份验证问题: 使用密码身份验证或使用不同的密钥 选择此选项将生成3个更多的配置框,镜像Jenkins SSH密钥可用的选项。 密码短语/密码 如果已配置密钥路径或密钥,则这是要与加密密钥一起使用的密码短语。 如果没有配置密钥,则这是用于密码身份验证的密码。 密钥路径 请参见上面的描述。 密钥 请参见上面的描述。 禁用exec 此选项将删除使用此配置执行命令的能力。 链接在此处

谢谢您的回答,但我已经在Jenkins中输入了与Putty中完全相同的信息,但它却无法工作。 - Corinne Kubler

1

我遇到了相同的问题,以下步骤对我有用:(我正在使用jenkins 1.57)

  1. 转到http:// / jenkins / manage
    1. 配置系统
    2. 浏览到发布SSH部分
      • 密码短语:空白
      • 密钥路径:空白
      • 密钥:空白
      • 禁用exec:取消选择
      • SSH服务器 - 名称:remote_user@remotehost.com - 主机名:remotehost.com - 用户名:remote_user - 远程目录:空 - 高级 - 选中“使用密码身份验证或使用不同的密钥”框 - 端口:22 - 超时(毫秒):300000 - “测试配置”

成功


0

如果您使用RSA密钥,并在私钥中看到以下字符串:

    -----BEGIN RSA PRIVATE KEY-----
***************************************

-----END RSA PRIVATE KEY-----

您需要编辑远程机器上的sshd配置文件:

sudo vim /etc/ssh/sshd_config

在这个文件中添加行:

HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

0

我有同样的问题,我在 Windows 上,解决方案:

  • 打开 OpenSSH 调试模式,无法看到错误详情,点击此处查看详情
    • 停止 sshd 服务
    • 在 PowerShell 中输入 'sshd -d'
  • 现在重新连接,您可以看到错误详情,我的错误是
    userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
    
  • 我们可以在服务器的 sshd_config 文件中添加 PubkeyAcceptedKeyTypes=+ssh-rsa点击此处查看详情
  • 现在测试成功,如果仍然出现像 Failed to connect SFTP channel 的错误并且调试信息为
    debug1: subsystem: cannot stat sftp-server.exe: No such file or directory
    
    这是因为 OpenSSH 不在 Windows 系统路径中。点击此处查看详情

0

今天我遇到了完全相同的问题,想和大家分享一下我的解决方法

通常情况下,当我通过SSH连接到我的EC2实例时,AWS希望用户名为

ubuntu@[IP地址/网址]

Jenkins只需要用户名,因此删除其他内容

ubuntu


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接