【问题标题】:Jenkins won't use SSH keyJenkins 不会使用 SSH 密钥
【发布时间】:2015-03-26 12:08:17
【问题描述】:

很抱歉不得不问这个问题,但我觉得到目前为止我已经尝试了所有关于 SO 的答案,但没有运气。

我有我的本地机器和我的远程服务器。 Jenkins 已在我的服务器上启动并运行。

如果我打开终端并执行scp /path/to/file user@server:/path/to/wherever 之类的操作,那么我的 ssh 无需密码即可正常工作

如果我在 Jenkins 作业中运行此命令,我会得到“Host Key Verification Failed

所以我知道我的 SSH 按我想要的方式正常工作,但为什么我不能让 Jenkins 使用这个 SSH 密钥?

有趣的是,当我第一次设置 Jenkins 和密钥时它确实工作正常,然后我想我重新启动了本地机器,或者重新启动了 Jenkins,然后它就停止了工作。很难说到底是什么原因造成的。

我还尝试了几个关于 ssh-agent 和 ssh-add 的选项,但这些选项似乎不起作用。

我验证了本地计算机 .pub 位于服务器上的 /user/.ssh 文件夹中,并且也在授权密钥文件中。该文件夹归用户所有。

任何想法将不胜感激,我可以提供有关我的问题的更多信息。谢谢!

更新:

根据 Kensters 的建议,我做了 su - jenkins,然后是 ssh server,它要求我添加到已知主机。所以我认为这是朝着正确方向迈出的一步。但之后同样的问题依然存在。

在使用我的myUsername 帐户时,我可以在没有密码的情况下使用ssh server 之前没有注意到的事情。但是如果我切换到jenkins 用户,那么当我执行ssh server 时它会要求我输入密码。

我也按照建议尝试了ssh-keygen -R server,但无济于事。

【问题讨论】:

    标签: ssh jenkins debian


    【解决方案1】:

    试试

    su jenkins
    ssh-keyscan YOUR-HOSTNAME >> ~/.ssh/known_hosts
    

    SSH 从站插件不支持 ECDSA。上面的命令应该为 ssh-slave 添加 RSA 密钥。

    【讨论】:

    • 对我来说没有用户 Jenkins,但第二行有效。我正在使用存储在 gitlab 中的 terraform 模块,我必须在运行 terraform init 之前执行ssh-keyscan gitlab.com >> ~/.ssh/known_hosts。只要我使用命令设置了 known_hosts 文件,terraform init 就会成功。
    【解决方案2】:
    Host Key Verification Failed
    

    ssh 抱怨的是远程主机密钥,而不是您尝试用于身份验证的本地密钥。

    每个 SSH 服务器都有一个 主机密钥,用于向客户端识别服务器。这有助于防止客户端连接到模拟目标服务器的服务器。首次使用 ssh 连接特定主机时,ssh 通常会提示您接受远程主机的主机密钥,然后将密钥存储在本地,以便 ssh 将来识别该密钥。广泛使用的 OpenSSH ssh 程序将已知主机密钥存储在每个用户主目录中的文件 .ssh/known_hosts 中。

    在这种情况下,发生了以下两种情况之一:

    1. Jenkins 用来运行这些作业的用户 ID 以前从未连接到这个特定的远程主机,并且在其 known_hosts 文件中没有远程主机的主机密钥。
    2. 远程主机密钥由于某种原因已更改,它不再与存储在 Jenkins 用户的 known_hosts 文件中的密钥匹配。

    您需要为 jenkins 用来运行这些 ssh 操作的用户更新 known_hosts 文件。您需要从文件中删除此主机的所有旧主机密钥,然后将主机的新主机密钥添加到文件中。最简单的方法是使用 susudo 成为 Jenkins 用户,然后交互运行 ssh 连接到远程服务器:

    $ ssh server
    

    如果 ssh 提示您接受主机密钥,请说是,然后您就完成了。您甚至不必完成登录。如果它打印出主机密钥已更改的可怕警告,请运行此命令以从 known_hosts 中删除现有主机:

    $ ssh-keygen -R server
    

    然后重新运行 ssh 命令。

    【讨论】:

    • 非常感谢您的建议。但是,我仍然卡住了,我已经根据您的反馈使用我采取的步骤更新了我的问题。
    【解决方案3】:

    需要注意的一点:当您生成要与 Jenkins 一起使用的密钥时,您不能使用密码,因为它让您没有机会输入这样的内容(因为它运行自动化作业无需人工干预)。

    【讨论】:

    • ssh 代理插件允许输入密码
    • 我没有看到,但我使用的是 Blue Ocean。也许他们只是还没有实现。
    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 2018-08-02
    • 2018-09-08
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    相关资源
    最近更新 更多