Jenkins主机密钥验证失败


164

我的詹金斯(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密钥”完成了这些步骤。

在詹金斯下登录

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仓库。

感谢帮助!。



尚无jenkins用户
-IceFire

Answers:


183

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


6
显示以下内容:权限被拒绝(公钥)。致命:远端意外挂断
AMMérida'13

6
是的,但这是一个完全不同的错误。现在,您必须通过bitbucket.org将公共密钥添加到存储库中。
ctc


2
+1为“ worksforme”,有完全相同的问题。为jenkins chmod-ed为适当的用户创建了id_rsa,添加了公钥,仍然无法正常工作。尝试使用git作为sudo -u jenkins产生了knonwn_hosts文件,从而解决了该问题。
sibidiba 2013年

3
您需要以运行Jenkins的用户身份运行它。在大多数系统上,通常以独立用户(例如“詹金斯”用户)的身份运行它。因此,您需要切换到该用户以确保将bitbucket.org的地址添加到〜/ .ssh / known_hosts中。
ctc 2014年

43

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

要解决“ Jenkins主机密钥验证失败”,请执行以下步骤。我曾与詹金斯一起使用过水银。

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)一旦手动完成,现在去詹金斯并进行构建

请享用!!!

祝好运


这里要求输入什么密码?
IceFire

26

或者您可以使用:

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

摘自要点


3
这使您可以进行潜在的MITM攻击。
ctc 2015年

1
您可以添加-oStrictHostKeyChecking = no并连接一次,这会将主机添加到known_hosts文件(与在命令行上ssh并键入yes将密钥添加到known_hosts文件时相同),然后在此之后删除此选项。
krupan

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

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


1
上面的用于更改组权限的命令(chmod G-rwx〜/ .ssh / id *)失败。以下按需工作。chmod g-
rwx〜


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

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

  • 登录到该进程失败的服务器,然后执行以下操作:

    1. 向用户运行该进程的须藤

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


在第3步中,可能是提示您文件中已经存在密钥,但是您应该继续执行这4步,如果可以从jenkins用户无密码登录,则设置完成。
拉基布尔·哈克

3

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

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

Jenkins,全局属性,环境变量,GIT_SSH_COMMAND

注意:如果看不到该选项,则可能需要使用EnvInject插件


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'

2

最好的方法是在Jenkinsfile中或任何需要的地方使用“ https” URL格式的“ git url”。

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


2

SSH协议

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

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

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

而已!

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

希望您能解决您的问题。


2

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


1

尝试

ssh-keygen -R主机名

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.