在 Jenkins for Git 中管理 SSH 密钥

Posted

技术标签:

【中文标题】在 Jenkins for Git 中管理 SSH 密钥【英文标题】:Managing SSH keys within Jenkins for Git 【发布时间】:2013-02-25 05:21:24 【问题描述】:

我正在尝试使用 GitHub 托管的存储库(使用 Jenkins Git 插件)启动并运行 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

我也尝试按照here 的说明设置 SSH 配置文件,但无济于事。

谁能解释一下?谢谢

编辑

我应该补充一点,我正在运行 CentOS 5.8

【问题讨论】:

【参考方案1】:

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

【讨论】:

@Adam - 你从来没有提到过known_hosts ;) 你只是在谈论id_rsa.pub 公钥:D 我做到了。 (如果没有添加或授权主机,您通常会看到失败)。我只是没有明确提及该文件。 无论如何你都打败了我,而我正在格式化答案:D 感谢您的回复 ;) 我认为这可能与已知主机有关,但我无法以 jenkins 身份登录。我设法为用户设置了密码,并收到了密码提示,但是当我提供密码时,用户会话没有切换。有没有办法手动将github添加为known_host? 我想我知道这个问题。运行以下命令:usermod -s '/bin/bash' jenkins 将 shell 设置为 /bin/bash,而不是为 jenkins 用户设置的默认 /bin/false。那你应该可以su.【参考方案2】:

您是否尝试过以 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),但您包含的那个链接据说可以解决这个问题。

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

【讨论】:

【参考方案3】:

根据这个article,你可以试试下面的命令:

   ssh-add -l

如果你的钥匙不在列表中,那么

   ssh-add /var/lib/jenkins/.ssh/id_rsa_project

【讨论】:

【参考方案4】:

如果您在 /Jenkins/.ssh/ 中有配置和私钥文件,这对我有用,您需要为这 2 个文件 chown(更改所有者)然后重新启动 jenkins,以便 jenkins 实例读取这两个文件。

【讨论】:

以上是关于在 Jenkins for Git 中管理 SSH 密钥的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins安装和持续集成环境配置

Jenkins的系统设置

Jenkins Error cloning remote repo 'origin', slave node

jenkins

jenkins

jenkins+git详细配置及使用方法,为啥提示错误