Jenkins不会使用SSH密钥

时间:2015-03-26 12:08:18

标签: ssh jenkins debian

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

我有本地计算机和远程服务器。 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文件夹中的服务器上,并且也位于授权密钥文件中。该文件夹归用户所有。

任何想法都会非常感激,我可以提供有关我的问题的更多信息。谢谢!

更新

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

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

我也按照建议ssh-keygen -R server尝试无效。

3 个答案:

答案 0 :(得分:3)

Host Key Verification Failed

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

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

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

  1. Jenkins用于运行这些作业的用户ID以前从未连接到此特定远程主机,并且在 known_hosts 文件中没有远程主机的主机密钥。
  2. 由于某种原因,远程主机密钥已更改,并且它不再与存储在Jenkins用户的 known_hosts 文件中的密钥匹配。
  3. 您需要为jenkins用来运行这些ssh操作的用户更新 known_hosts 文件。您需要从该文件中删除该主机的任何旧主机密钥,然后将主机的新主机密钥添加到该文件中。最简单的方法是使用 su sudo 成为Jenkins用户,然后以交互方式运行ssh以连接到远程服务器:

    $ ssh server
    

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

    $ ssh-keygen -R server
    

    然后重新运行 ssh 命令。

答案 1 :(得分:3)

尝试

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

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

答案 2 :(得分:0)

有一点需要注意:当你生成一个你将要与Jenkins一起使用的密钥时,你不能使用密码,因为它没有机会输入这样的东西(看到它运行自动化的工作没有人为干预)。