我在 Tomcat Windows 服务上运行了带有 git 插件的 Hudson(持续集成系统)。已安装 msysgit,并且 msysgit bin 目录位于路径中。已安装 PuTTY/Pageant/plink,并且已将 msysgit 配置为使用它们。
我认为我遇到的问题是,拥有 Tomcat/Hudson 服务(本地系统)的用户没有设置 SSH 密钥来克隆 git 存储库。当 git Hudson 插件尝试克隆时,它会给出错误:
$ 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
我的问题是,如何设置以便 git 插件/msysgit 在尝试克隆时知道使用特定的 SSH 私钥?我认为 Pageant 不会起作用,因为 Tomcat 服务以“本地系统”用户身份运行,但我可能错了。
编辑:
我尝试将 Pageant 设置为服务(使用 runassvc.exe),传递适当的密钥,并让其以“本地系统”运行。其他服务似乎无法从 pageant 服务中看到密钥。
答案1
您绝对应该能够在非系统用户下运行它。选择/创建一个用户来运行 Hudson,然后尝试使用 ssh user@host 连接到服务器。如果它要求输入密码,显然它没有找到您的密钥。
在这种情况下,请仔细检查密钥是否已加载到 pageant 中(您需要让 pageant 在每次启动时从磁盘加载相关密钥),以及是否设置了 GIT_SSH 环境变量。
另一种方法是设置 GIT_SSH 环境变量以包含对密钥的引用。我目前使用 tunnelier 和 SV 执行此操作,因此例如我的 SVN_SSH 变量是“sexec -pk=1”,其中 sexec 是 tunnelier 的 ssh CLI,-pk=1 告诉它在插槽 1 中使用我的私钥。
答案2
您可以使用 openssh 密钥而不是使用 putty 来执行此操作;putty 的挑战是需要运行 pageant,但使用 openssh 密钥,您只需要将 id_rsa 密钥放在 ~/.ssh 中
我通常的做法是将 Jenkins 设置为以我创建的新用户身份运行。我转到用户的主目录(Windows Vista 及更高版本上默认为 C:\Users\),然后创建一个 .ssh 目录,在其中放置一个 id_rsa 文件,其中包含我想以 openssh 格式使用的私钥。
我只需要在 Mac 上找到类似的技巧:http://colonelpanic.net/2011/06/jenkins-on-mac-os-x-git-w-ssh-public-key/