Jenkins主机密钥验证失败

时间:2013-03-02 11:59:42

标签: jenkins

我有 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 存储库。

感谢帮助!。

14 个答案:

答案 0 :(得分:172)

更改为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中收到此错误。

答案 1 :(得分:37)

Jenkins是一个服务帐户,它没有设计shell。通常接受服务帐户。不应该以交互方式登录。

要解决“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)按Enter键 - >不要给任何密码短语 - >按enter键

             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服务器

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

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

享受!!!

祝你好运

答案 2 :(得分:20)

或者您可以使用:

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

摘自gist

答案 3 :(得分: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

现在以jenkins身份连接

sudo su jenkins

尝试使用jenkins命令

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

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

答案 4 :(得分:4)

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

你应该删除用户名@

答案 5 :(得分:3)

  • 确保我们没有编辑任何默认的sshd_config属性以跳过错误

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

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

    1. Sudo给运行该过程的用户

    2. ssh-copy-id destinationuser@destinationhostname

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

      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 目录中文件的默认权限,最终会遇到不同的问题

答案 6 :(得分:1)

最好的方法是在Jenkins文件中或任何你想要的地方使用“https”URL格式的“git url”。

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

答案 7 :(得分:1)

尝试

ssh-keygen -R hostname

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

非常有用

答案 8 :(得分:1)

<强> SSH

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

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

答案 9 :(得分:1)

从bitbucket和github复制主机密钥:

ssh root @ deployserver'echo“$(ssh-keyscan -t rsa,dsa bitbucket.org)”&gt;&gt; /root/.ssh/known_hosts' ssh root @ deployserver'echo“$(ssh-keyscan -t rsa,dsa github.com)”&gt;&gt; /root/.ssh/known_hosts'

答案 10 :(得分:1)

  1. 使用jenkins登录:“ sudo su -s / bin / bash jenkins”
  2. git克隆导致密钥错误的所需回购
  3. 它将要求您通过显示是/否(输入是或y)来添加密钥

就是这样!

您现在可以重新运行詹金斯作业。

我希望您能解决您的问题。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

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

Jenkins, Global properties, Environment variables, GIT_SSH_COMMAND

注意:如果看不到该选项,则可能需要EnvInject plugin

答案 13 :(得分:0)

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

下一步是找出如何为该用户创建chroot,并修改该chroot内部的已知主机。或者只是采取其他方法来忽略已知主机,例如ssh-keyscan,StrictHostKeyChecking = no左右。