Jenkins:无法连接到存储库

时间:2014-02-04 16:31:09

标签: git github ssh jenkins

我正在尝试在github repo上连接jenkins。

当我指定Repo URL时,jenkins会返回以下错误消息:

  

无法连接到存储库:命令“git ls-remote -h git@github.com:adolfosrs / jenkins-test.git HEAD”返回状态码128:   标准输出:   stderr:主机密钥验证失败。   致命:无法从远程存储库读取。   请确保您拥有正确的访问权限   存储库存在。

使用HTTPS时:// Url jenkins返回:

  

无法连接到存储库:无法连接到   https://github.com/adolfosrs/jenkins-test.git(状态= 407)

我可以在jenkins运行的同一台机器上成功克隆repo,并且我也运行git ls-remote -h git@github.com:adolfosrs/jenkins-test.git HEAD命令。所以我在github上有正确的SSH。

13 个答案:

答案 0 :(得分:16)

问题是我以某种方式用root用户创建了ssh文件。 所以文件所有者是root。

解决方案只是将所有权更改为jenkins用户。

chown jenkins id_rsa.pub 
chown jenkins id_rsa

答案 1 :(得分:6)

这是一个非常棘手的问题 - 即使你已经熟悉https中的证书如何工作(如果你看到我的解决办法,OTOH,似乎非常符合逻辑:)

如果要通过shell中的http连接到GIT存储库,则应确保将公共证书存储(作为文件)在您的计算机上。然后,您将该证书添加到您的GIT配置

  

git config [--global] http.sslCAInfo“certificate”

(将“certificate”替换为PEM文件的完整路径/名称:)

对于shell的使用,你也可以这样做,例如提供一个'.netrc'来证明您的http-server登录凭据。 完成后,您将能够执行“git clone https:// ...”而无需任何交互式配置凭据。

然而,对于Jenkins服务,它有点不同...... 在这里,jenkins进程需要知道服务器证书 - 并且它不使用shell设置(在全局git配置文件'.gitconfig'的含义中):P

我需要做的是在Jenkins的启动选项中添加另一个参数。

  

... -Djavax.net.ssl.trustStore =“keystore”......

(将“keystore”替换为完整的路径/名称,如下所述:)

现在将持有证书的Web服务器的密钥库文件复制到某个路径(我知道这是一个肮脏的黑客,不完全安全:)并使用'-Djavax.net引用它。 ssl.trustStore ='参数。

现在,Jenkins服务将接受来自通过https提供存储库的Web服务器的证书。配置GIT存储库URL,如

  

https://yourserver.com/your-repositorypath

请注意,您仍需要jenkins-user主文件夹下的“.netrc”进行登录!!! 因此,我所描述的将被视为一种解决方法......直到提供正常工作的凭证帮助程序插件。恕我直言这个插件(在其当前版本1.9.4中)是错误的。

无论我怎样尝试,我都无法从Jenkins那里获得凭证助手:( 充其量我看到了一些关于无法访问的临时凭证帮助文件等的错误。您可以在Jenkins JIRA中看到很多关于它的错误,但没有修复。

所以,如果有人让它工作正常,请分享知识......


P.S。:使用以下版本的Jenkins插件:

凭据插件1.9.4,   GIT客户端插件1.6.1,   Jenkins GIT插件2.0.1

答案 2 :(得分:3)

我遇到了完全相同的问题。我在Mac上解决它的方式是:

  1. 切换到jenkins用户(sudo -iu jenkins)
  2. 运行:ssh-keygen(注意 - 您现在正在为jenkins用户创建ssh密钥对。您应该看到如下内容:输入要保存密钥的文件(/Users/Shared/Jenkins/.ssh/id_rsa) :
  3. 按住Enter键进入默认值,直到结束
  4. 运行Jenkins错误消息中显示的命令(例如:" git ls-remote -h git@github.com:adolfosrs/jenkins-test.git HEAD")
  5. 系统会询问您是否要继续。说是
  6. Github repo将被添加到您的known_hosts文件中:/Users/Shared/Jenkins/.ssh /
  7. 返回Jenkins门户并尝试使用Github SSH URL
  8. 它应该工作。祝你好运

答案 3 :(得分:2)

使用以下设置进行检查。这总是对我有用。

詹金斯配置:

1)检查是否正确指定了git可执行文件

2)提供SSH存储库链接git @ blahblah

3)在凭据>>下选择用户名和身份验证密钥(转到您的服务器,生成SSH密钥ssh-keygen ...将密钥复制到JENKINS_HOME /,ssh)您应该能够从Jenkins连接到您的GIT存储库

答案 4 :(得分:2)

Jenkins作为另一个用户运行,而不是普通登录。 所以,这样做可以解决ssh问题:

  1. 以jenkins su jenkins身份登录 (你可能首先必须{j} sudo passwd jenkins才能设置jenkins的密码。我找不到默认值...)
  2. 生成ssh密钥对:ssh-keygen
  3. 将公钥(id_rsa.pub)复制到您的github帐户(或任何地方)
  4. 将repo 克隆为jenkins ,以便将主机添加到jenkins known_hosts,这是必要的。现在,如果愿意,您可以再次删除克隆的仓库。

答案 5 :(得分:2)

在我们的案例中,必须在Jenkins服务器上安装git

答案 6 :(得分:1)

在Ubuntu上,将id_rsaid_rsa.pub个文件放在/var/lib/jenkins/.ssh

让詹金斯拥有他们 sudo chown -R jenkins /var/lib/jenkins/.ssh/

确保将Jenkins密钥添加为部署密钥,并在GitHub中使用RW访问(或类似) - 使用id_rsa.pub密钥。

现在一切都应该与SCM Sync插件一起使用。

答案 7 :(得分:0)

让我在此添加一个可能产生此类错误的非常小的问题是存储库URL中缺少.git扩展名。确保输入以.git结尾的完全限定的URL。我使用bitbucket所以我所做的就是点击'clone',我会自动生成完全限定的URL。与github有类似的方法。

答案 8 :(得分:0)

就我而言,我使用root用户编辑了known_hosts文件。因此它将文件所有权更改为root并且jenkins用户开始抛出" git@github.com:xxxxxx / xxxx.git HEAD"返回状态码128:stdout:stderr:主机密钥验证失败"克隆git图像时出错。 恢复所有权解决了这个问题。

答案 9 :(得分:0)

确保将RSA主机密钥和bitbucket服务器的IP添加到“已知主机”中。文件。内容应该看起来像

bitbucket.org,xx.xx.xx.xx ssh-rsa host_key

请记住将/var/lib/jenkins/.ssh/

中的所有文件的所有权更改为Jenkins

答案 10 :(得分:0)

到目前为止,这里没有提及,但这也可能来自藏匿处。 我们遇到了同样的问题,导致问题的根本原因是我们用于詹金斯的存储实例崩溃了。 重新启动存储可以解决我们的情况。

答案 11 :(得分:0)

就我而言,我通过

解决了此问题
  • 单击“凭据”文本旁边的按钮添加
  • 添加凭据(loginpassword
  • 在弹出菜单上选择这些凭据,该菜单位于添加按钮的左侧
  • 等待几秒钟

我的环境是Windows中安装的Jenkins。 UI问题是为什么将警告放置在解决该问题的工具之前。

答案 12 :(得分:0)

当我尝试将Windows服务器中的jenkins与私有GIT存储库连接时,我遇到了类似的问题。以下是Jenkins job的源代码管理部分返回的错误

  

无法连接到存储库:命令“ git.exe ls-remote -h   ssh://git@my_server/repo.git HEAD“返回状态码128:标准输出:   stderr:加载密钥“ C:\ Windows \ TEMP \ ssh4813927591749610777.key”:   无效格式git @ my_server:权限被拒绝(公钥)。   致命的:无法从远程存储库读取。

     

请确保您具有正确的访问权限和存储库   存在。

抛出此错误是因为jenkins无法从其用户目录中选择ssh私钥。我以以下方式解决了这个问题

步骤1

在詹金斯工作中,在Source Code Management下填写以下信息

  

存储库

     

存储库URL:ssh://git@my_server/repo.git
  凭证:-none-

步骤2

在我的设置中,jenkins是在本地系统帐户下运行的,因此用户目录为C:\Windows\System32\config\systemprofile(这在此设置中非常重要,并不是很明显)。

现在通过ssh-keygen -t rsa -C "key label" shell使用git bash创建ssh私钥和公钥。 ssh私钥和公钥位于已登录用户目录的.ssh目录下。只需复制.ssh文件夹并将其粘贴到C:\Windows\System32\config\systemprofile

步骤3

将公共密钥添加到GIT服务器帐户。运行jenkins作业,现在您应该能够通过jenkins的ssh连接到GIT帐户。