管理Jenkins中用于Git的SSH密钥

55

我正在尝试使用Jenkins Git插件在GitHub托管的存储库上运行Jenkins。该存储库具有多个git子模块,因此我不确定是否要尝试管理多个部署密钥。

我的个人GitHub用户帐户是我希望在Jenkins中拉取的每个项目的合作者,因此我已在/var/lib/jenkins/.ssh中生成了一个SSH密钥,并将其添加到了我的个人GitHub帐户中。

然而,当我尝试将存储库URL添加到我的Jenkins项目配置中时,我收到以下错误信息:

Failed to connect to repository : Command "git ls-remote -h git@github.com:***/***.git HEAD" returned status code 128:
stdout: 
stderr: Host key verification failed. 
fatal: The remote end hung up unexpectedly

同样,当我安排构建时,我会得到以下信息:

stderr: Host key verification failed.
fatal: The remote end hung up unexpectedly

我也尝试根据这里的说明设置了SSH配置文件,但是没有成功。

有人可以给予一些帮助吗?谢谢!

编辑

我应该补充说明,我正在运行CentOS 5.8。

4个回答

65

看起来jenkins试图连接的github.com主机未列在Jenkins用户的$HOME/.ssh/known_hosts文件中。Jenkins在大多数发行版上以用户jenkins身份运行,因此具有其自己的.ssh目录来存储公钥和known_hosts列表。

我能想到的最简单的解决方法是:

# Login as the jenkins user and specify shell explicity,
# since the default shell is /bin/false for most
# jenkins installations.
sudo su jenkins -s /bin/bash

cd SOME_TMP_DIR
# git clone YOUR_GITHUB_URL

# Allow adding the SSH host key to your known_hosts

# Exit from su
exit

1
我做了。 (如果主机未添加或未授权,则经常会看到失败)。 我只是没有明确提及文件。 - Adam Gent
确实,我已经作为root用户登录了。su jenkins没有任何反应;我仍然是root@servername。echo $HOME给出的是/root - James
@Tuxdude 这与我之前提到的相同。可能有帮助的是,我能够毫无问题地执行“passwd jenkins”,所以我觉得无法登录很奇怪。 - James
4
我想我知道问题所在了。运行以下命令:usermod -s '/bin/bash' jenkins,将shell设置为/bin/bash,而不是默认的/bin/false,该命令会为jenkins用户进行设置。然后你就可以使用su命令了。 - Tuxdude
完美的。 运行成功了;我现在正在遇到一个git配置错误(还没有为Jenkins设置它)。感谢你的帮助! - James
显示剩余10条评论

6

你尝试过以Jenkins用户身份登录吗?

试试这个:

sudo -i -u jenkins #For RedHat you might have to do 'su' instead.
git clone git@github.com:your/repo.git

通常情况下,如果主机尚未添加或授权,则可能会看到失败的情况(因此我总是手动登录hudson / jenkins以进行第一次连接到github / bitbucket),但您包含的链接据说可以解决这个问题。

如果上述方法不起作用,请尝试重新复制密钥。确保它是公钥(即id_rsa.pub)。也许您错过了一些字符?


4
根据这个文章,您可以尝试以下命令:
   ssh-add -l

如果您的密钥不在列表中,则:
   ssh-add /var/lib/jenkins/.ssh/id_rsa_project

1
如果您的配置文件和私钥文件位于 /Jenkins/.ssh/ 中,则需要为这两个文件 更改所有者,然后 重新启动 Jenkins ,以便 Jenkins 实例读取这两个文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接