【问题标题】:Jenkins Host key verification failedJenkins 主机密钥验证失败
【发布时间】:2013-02-16 22:13:17
【问题描述】:

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

感谢帮助!

【问题讨论】:

标签: jenkins


【解决方案1】:

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

【讨论】:

  • 显示:权限被拒绝(公钥)。致命:远端意外挂断
  • 对,但这是一个完全不同的错误。现在您必须将您的公钥添加到位于 bitbucket.org 的存储库中。
  • +1 for "worksforme",有完全相同的问题。为正确的用户创建了 id_rsa,chmod-ed 到 jenkins,添加了公钥,仍然没有工作。尝试 git as sudo -u jenkins 产生了 knonwn_hosts 文件,解决了问题。
  • 您需要以运行 Jenkins 的用户身份运行它。在大多数系统上,通常将其作为单独的用户(例如“jenkins”用户)运行。因此,您需要切换到该用户以确保将 bitbucket.org 的地址添加到 ~/.ssh/known_hosts。
【解决方案2】:

遇到同样的问题,我是这样解决的:

重置 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 就可以连接 repo(至少对我来说是^^)

【讨论】:

  • 上述更改组权限的命令(chmod G-rwx ~/.ssh/id*) 失败。以下按需要工作。 chmod g-rwx ~/.ssh/id*
【解决方案3】:

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

你应该删除用户名@

【讨论】:

    【解决方案4】:

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

    要解决“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) 按 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 并进行构建

    享受!!!

    祝你好运

    【讨论】:

    • 这里需要什么密码?
    【解决方案5】:
    • 确保我们没有编辑任何默认 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目录下文件的默认权限,你会遇到不同的问题

    【讨论】:

    • 在第 3 步中,可能会提示您使用文件中已存在的密钥,但您应该继续这 4 个步骤,如果您可以从 jenkins 用户那里无需密码即可登录都设置好了。
    • jenkins 用户缺少 .pub 文件。
    【解决方案6】:

    或者你可以使用:

    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

    【讨论】:

    • 这会让您面临潜在的 MITM 攻击。
    • 您可以添加 -oStrictHostKeyChecking=no 并连接一次,这会将主机添加到 known_hosts 文件(与您在命令行上 ssh 并键入 yes 以将密钥添加到 known_hosts 文件时相同)然后删除此选项。
    • 域查找是冒险的,因为主机可能在集群上运行。你一分钟前得到的机器下一分钟可能是另一个盒子。
    【解决方案7】:

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

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

    【讨论】:

      【解决方案8】:

      试试

      ssh-keygen -R 主机名

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

      【讨论】:

        【解决方案9】:

        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. 现在应用并保存配置。
        9. 宾果游戏!开始构建项目。我希望现在您不会收到任何主机密钥验证错误!

        【讨论】:

          【解决方案10】:

          从 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'
          

          【讨论】:

            【解决方案11】:
            1. 使用 jenkins 登录:“sudo su -s /bin/bash jenkins”
            2. git clone 需要的 repo 会导致 key 错误
            3. 它会要求您通过显示是/否(输入是或 y)来添加密钥

            就是这样!

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

            希望这能解决您的问题。

            【讨论】:

            • 不,它只是要求输入密码,我尝试了 jenkins 密码和 git 密码,它也不接受。
            【解决方案12】:

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

            【讨论】:

              【解决方案13】:

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

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

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

              【讨论】:

                【解决方案14】:

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

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

                【讨论】:

                  【解决方案15】:

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

                  ssh-copy-id -i ~/.ssh/mykey user@host
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-09-10
                    • 1970-01-01
                    • 2021-12-25
                    • 1970-01-01
                    • 2012-05-30
                    • 2020-07-15
                    • 2018-11-13
                    相关资源
                    最近更新 更多