我很抱歉不得不提出这个问题,但我觉得到目前为止我已经尝试了所有的答案而没有运气。
我有本地计算机和远程服务器。 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
尝试无效。
答案 0 :(得分:3)
Host Key Verification Failed
ssh抱怨远程主机密钥,而不是您尝试用于身份验证的本地密钥。
每个SSH服务器都有一个主机密钥,用于向客户端标识服务器。这有助于防止客户端连接到模拟目标服务器的服务器。第一次使用ssh连接到特定主机时,ssh通常会提示您接受远程主机的主机密钥,然后在本地存储密钥,以便ssh将来识别该密钥。广泛使用的OpenSSH ssh程序将已知主机密钥存储在每个用户主目录中的文件 .ssh / known_hosts 中。
在这种情况下,发生了两件事之一:
您需要为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一起使用的密钥时,你不能使用密码,因为它没有机会输入这样的东西(看到它运行自动化的工作没有人为干预)。