183

我对jenkins有问题,设置“git”,显示以下错误:

Failed to connect to repository : Command "git ls-remote -h https://person@bitbucket.org/person/projectmarket.git HEAD" returned status code 128:
stdout:
stderr: fatal: Authentication failed

我用ssh测试过:

git@bitbucket.org:person/projectmarket.git

这是错误:

Failed to connect to repository : Command "git ls-remote -h git@bitbucket.org:person/projectmarket.git HEAD" returned status code 128:
stdout:
stderr: Host key verification failed.
fatal: The remote end hung up unexpectedly

我还使用“SSH 密钥”完成了这些步骤。

在 Jenkins 下登录

sudo su jenkins

将您的 github 密钥复制到 Jenkins .ssh 文件夹

cp ~/.ssh/id_rsa_github* /var/lib/jenkins/.ssh/

重命名键

mv id_rsa_github id_rsa
mv id_rsa_github.pub id_rsa.pub

但仍然无法在jenkins中工作git存储库。

感谢帮助!

4

16 回答 16

198

更改为jenkins用户并手动运行命令:

git ls-remote -h git@bitbucket.org:person/projectmarket.git HEAD

首次通过 SSH 连接到新主机时,您将收到标准 SSH 警告:

The authenticity of host 'bitbucket.org (207.223.240.181)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)?

键入yes并按 Enter。主机密钥bitbucket.org现在将添加到~/.ssh/known_hosts文件中,您将不会再在 Jenkins 中收到此错误。

于 2013-03-04T06:54:23.287 回答
55

Jenkins 是一个服务帐户,它没有设计外壳。人们普遍接受服务帐户。应该不能交互式登录。

要解决“Jenkins 主机密钥验证失败”,请执行以下步骤。我用 mercurial 和詹金斯。

1)在终端上执行以下命令

             $ sudo su -s /bin/bash jenkins

提供密码

2)使用以下命令生成公钥私钥:

              ssh-keygen

你可以看到输出为::

Generating public/private rsa key pair. 
Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

3)按回车->不提供任何密码->按回车

             Key has been generated

4) 转到 --> cat /var/lib/jenkins/.ssh/id_rsa.pub

5) 从 id_rsa.pub 复制密钥

6)退出bash

7)ssh@yourrepository

8)vi .ssh/authorized_keys

9) 粘贴密钥

10) 退出

11)手动登录mercurial服务器

注意:请手动登录,否则詹金斯会再次给出错误“主机验证失败”

12)一旦手动完成,现在去 Jenkins 并进行构建

享受!!!

祝你好运

于 2014-11-17T13:12:53.597 回答
31

或者您可以使用:

ssh -oStrictHostKeyChecking=no host

这将是不安全的(中间人攻击),但最简单的解决方案。

更好的方法是在主机和 IP 地址之间生成正确的映射,所以ssh不会抱怨:

#!/bin/bash

for domain in "github.com" "bitbucket.org"; do
    sed -i "/$domain/d" ~/.ssh/known_hosts
    line=$(ssh-keyscan $domain,`nslookup $domain | awk '/^Address: / { print $2 ; exit }'`)
    echo $line >> ~/.ssh/known_hosts
done

摘自要点

于 2015-12-02T14:17:20.453 回答
6

有同样的问题,我这样解决:

重置 id_rsa* 权限仅适用于当前用户 无组 无其他

chmod o-rwx ~/.ssh/id*
chmod G-rwx ~/.ssh/id*

ls -lart ~/.ssh/


-rw-------  1 jenkins nogroup  398 avril  3 09:34 id_rsa.pub
-rw-------  1 jenkins nogroup 1675 avril  3 09:34 id_rsa

并清除 ~/.ssh/know_hosts

现在以詹金斯的身份连接

sudo su jenkins

试试 jenkins 命令

git ls-remote -h git@bitbucket.org:user/project.git HEAD

如果没有出现问题,现在詹金斯将能够连接回购(至少对我来说^^)

于 2014-04-03T08:06:34.617 回答
6

至于解决方法(例如 Windows slave),在全局属性中定义以下环境变量:

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"

詹金斯,全局属性,环境变量,GIT_SSH_COMMAND

注意:如果您没有看到该选项,您可能需要EnvInject插件

于 2019-09-04T15:16:52.210 回答
4

使用https://bitbucket.org/YYYY/XX.git

你应该删除用户名@

于 2014-05-11T05:46:34.967 回答
3

我遇到了这个问题,结果发现问题是 jenkins 服务没有以 jenkins 用户身份运行。因此,以 jenkins 用户身份运行命令就可以了。

于 2019-02-28T18:46:15.230 回答
3
  1. 使用 jenkins 登录:“sudo su -s /bin/bash jenkins”
  2. git clone 导致关键错误的所需仓库
  3. 它会要求您通过显示是/否来添加密钥(输入是或y)

而已!

您现在可以重新运行 jenkins 作业。

我希望你这能解决你的问题。

于 2018-11-28T19:14:25.570 回答
3
  • 确保我们没有编辑任何默认 sshd_config 属性以跳过错误

  • known_hosts主机验证失败 -文件中肯定缺少主机名条目

  • 登录到进程失败的服务器并执行以下操作:

    1. 对运行进程的用户执行 Sudo

    2. ssh-copy-id destinationuser@destinationhostname

    3. 第一次会这样提示,说yes,也会第一次询问密码:

      The authenticity of host 'sample.org (205.214.640.91)' can't be established.
      RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
      Are you sure you want to continue connecting (yes/no)? *yes*
      

      密码提示?给密码

    4. 现在从运行进程的服务器上,执行ssh destinationuser@destinationhostname. 它应该在没有密码的情况下登录。

      注意:不要更改用户.ssh目录中文件的默认权限,您最终会遇到不同的问题

于 2015-10-02T16:36:08.253 回答
3

从 bitbucket 和 github 复制主机密钥:

ssh root@deployserver 'echo "$(ssh-keyscan -t rsa,dsa bitbucket.org)" >> /root/.ssh/known_hosts'
ssh root@deployserver 'echo "$(ssh-keyscan -t rsa,dsa github.com)" >> /root/.ssh/known_hosts'
于 2018-02-28T22:57:47.067 回答
2

SSH

如果您使用 SSH 进行尝试,则主机密钥验证错误可能有多种原因。请按照以下步骤克服所有原因。

  1. 将环境变量设置为HOME并提供地址作为.ssh文件夹的根目录。例如:- 如果您的 .ssh 保存在Name文件夹中。C:/用户/名称。
  2. 现在确保在存储库链接中也提供了公共 SSH 密钥。它是 github 或 bitbucket 或任何其他。
  3. 打开 git bash。并尝试从存储库中克隆项目。这将有助于在 known_host 文件中添加您的存储库 URL,该文件是在 .ssh 文件夹中自动创建的。
  4. 现在打开 jenkins 并创建一个新工作。然后点击配置。
  5. 在 Git 下的源代码管理中提供克隆 URL。URL 应该以 git@github.com/....... 或 ssh://proje........ 开头
  6. 在凭据下,您需要添加要克隆项目的存储库表单的用户名和密码。选择该凭据。
  7. 现在应用并保存配置。
  8. 答对了!开始构建项目。我希望现在您不会收到任何主机密钥验证错误!
于 2017-08-02T06:29:34.920 回答
2

您可以在 Jenkinsfile 或任何您想要的任何地方以“https”URL 格式使用“git url”的最佳方式。

git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'

于 2016-05-11T10:01:11.067 回答
1

尝试

ssh-keygen -R 主机名

-R hostname 从 known_hosts 文件中删除属于 hostname 的所有键。此选项对于删除散列主机很有用

于 2017-01-02T11:55:30.470 回答
0

问题在于 /var/lib/jenkins/.ssh/known_hosts。它存在于第一种情况,但不存在于第二种情况。这意味着您在不同的系统上运行,或者第二种情况以某种方式在 chroot 中被监禁,或者通过其他方式与文件系统的其余部分分开(这是从 jenkins 运行随机代码的好主意)。

接下来的步骤是找出这个用户的 chroot 是如何创建的,并修改这个 chroot 中的已知主机。或者只是去忽略已知主机的其他方式,例如 ssh-keyscan,StrictHostKeyChecking=no 左右。

于 2020-10-05T02:48:23.887 回答
0

在 ssh-keygen 之后,可能只需要将公钥复制到远程主机:

ssh-copy-id -i ~/.ssh/mykey user@host
于 2021-09-20T14:55:21.293 回答
0

使用 ssh-keyscan 应该更容易:

ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts

此命令会将所有必需的主机放到~/.ssh/known_hosts. 您需要在 Jenkins 机器中运行此命令。您还可以创建一个作业并将该命令放入该作业配置的“执行外壳”部分,然后执行该作业。

于 2022-03-02T08:01:54.773 回答