在 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 密钥的主要内容,如果未能解决你的问题,请参考以下文章