如何使用SSH密钥配置Hudson和git插件

时间:2010-03-15 14:38:44

标签: git tomcat windows-services ssh hudson

我有一个在Tomcat Windows服务上运行的git插件的Hudson(持续集成系统)。 msysgit已安装且msysgit bin目录位于路径中。安装了PuTTY / Pageant / plink,msysgit配置为使用它们。

当我运行尝试克隆git存储库的作业时,我收到以下错误:

$ git clone -o origin git@hostname:project.git "e:\HUDSON_HOME\jobs\Project Trunk\workspace" 
ERROR: Error cloning remote repo 'origin' : Could not clone git@hostname:project.git 
ERROR: Cause: Error performing git clone -o origin git@hostname:project.git e:\HUDSON_HOME\jobs\Project Trunk\workspace 
Trying next repository 
ERROR: Could not clone from a repository 
FATAL: Could not clone 
hudson.plugins.git.GitException: Could not clone 
  1. 从命令行运行git clone -o origin git @ hostname:project.git“e:\ HUDSON_HOME \ jobs \ Project Trunk \ workspace”可以正常运行。
  2. 我已经确认我的问题与Hudson git clone error不同,因为git在路径中,我在Hudson的Configure System页面上没有得到任何关于git可执行文件的错误。
  3. 这让我相信问题在于拥有Tomcat / Hudson Windows服务(本地系统)的用户没有设置SSH密钥以能够克隆git存储库。

    我的问题是,如何设置以便git plugin / msysgit在尝试克隆时知道使用特定的SSH密钥?我不认为Pageant会工作,因为Tomcat服务作为“本地系统”用户运行,但我可能错了。我尝试将Pageant设置为服务(使用runassvc.exe),传递相应的密钥,并将其作为“本地系统”运行。 Tomcat / Hudson服务似乎无法从分页服务中看到密钥。是否还有其他设置密钥的技巧?

    感谢。

    编辑:关于http://n4.nabble.com/Hudson-with-git-and-ssh-td375633.html的讨论表明其他人有类似的问题。建议使用ssh-agent,这个工具确实带有msysgit,但我不确定如何将它与Hudson服务结合使用。如果有人能填补空白,仍然是一个很好的线索。感谢Peter对链接的评论。

    此外,关于http://n4.nabble.com/questions-about-git-and-github-plug-ins-td383420.html的讨论始于同一个问题。我正试图复活那个帖子。

4 个答案:

答案 0 :(得分:7)

Windows的另一个重要注意事项(我想附加到这个答案,因为我很快发现了这个问题,但发现这个我需要的额外细节只需要几个小时的搜索):

Git希望将%HOME%环境变量设置为您的用户目录(IE C:\ Documents and Settings \ hudsonuser)...这就是它知道如何使用密钥文件查找.ssh目录!

我发现了这个here on server fault(但在那里没有足够的声誉来支持它)。

答案 1 :(得分:6)

我们使用Hudson,使用ssh密钥检查git中的源代码。但是,我们实际上在一个ubuntu服务器上有Hudson。 Hudson的ssh密钥对位于~hudson/id_rsa~hudson/id_rsa.pub

因此,根据我们的建议调整Windows设置:

我们团队中基于Windows的开发人员使用MSysGit并定期通过git over ssh检查代码 - 但不使用Putty / Pageant。由于登录时出现一些协议错误,我们发现Pageant很痛苦。相反,他们将git配置为使用openSSH(它是安装期间的选项之一)。然后他们的公钥/私钥对生活在~username/id_rsa~username/id_rsa.pub中,一切正常。

所以,我建议更改你的git配置使用OpenSSH而不是选美。如果不出意外,你不必担心开始选美。

您可以使用PuttyGen生成密钥。但是,如果您使用的是OpenSSH而不是pageant,则需要导出合适的私钥(从PuttyGen顶部的其中一个菜单中)并将其保存为id_rsa,然后复制并粘贴公共来自PuttyGen GUI的密钥(它显示但不会为OpenSSH保存合适的版本)并将其保存为id_rsa.pub。这是因为Putty使用的格式与OpenSSH的格式略有不同。

或者,当然,您可以随时在ubuntu服务器(真实服务器或VirtualBox)上托管您的哈德森服务器

答案 2 :(得分:3)

我发现我必须使用不同的方法来使用 Ubuntu (使用Jenkins,而不是Hudson,不过它看起来基本上是同样的问题。我检查了%HOME%环境变量通过 Jenkins GUI 看起来是正确的。

我想用来识别Github私有存储库的 Jenkins 的密钥已经存在。我将这些内容复制到/var/lib/jenkins/.ssh - 该密钥和帐户的id_rsaid_rsa.pub文件。

最初我将这些复制为“root”并且 Jenkins 无法访问它们因此我仍然收到错误(令人困惑的是,错误要求我在没有错误时输入密码任何)。因此,我chownchmodchgrp将这些设置为 Jenkins

我通过以Jenkins用户身份登录时执行git克隆来测试这个。

我知道这条路径是特定于Ubuntu的,但是类似的设置确保密钥文件在正确的位置可用,并且在命令行上进行测试git clone git:myrepo,可能至少可以确定Windows的位置不同。

答案 3 :(得分:0)

将您的.ssh文件夹放在

C:\ Windows \ SysWOW64 \ config \ systemprofile

C:\的Windows \ system32 \设置\ systemprofile

取决于您的系统是32还是64.

这是“本地系统”的“USER”目录。