Jenkins:无法连接到存储库

问题描述 投票:32回答:12

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

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

无法连接到存储库:命令“git ls-remote -h [email protected]:adolfosrs / jenkins-test.git HEAD”返回状态码128:stdout:stderr:主机密钥验证失败。致命:无法从远程存储库读取。请确保您具有正确的访问权限并且存储库存在。

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

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

我可以在jenkins运行的同一台机器上成功克隆回购,我也运行git ls-remote -h [email protected]:adolfosrs/jenkins-test.git HEAD命令。所以我在github上有正确的SSH。

git github ssh jenkins
12个回答
16
投票

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

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

chown jenkins id_rsa.pub 
chown jenkins id_rsa

0
投票

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

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

请记住将/var/lib/jenkins/.ssh/中所有文件的所有权更改为Jenkins


0
投票

到目前为止,这里没有提到,但这也可能来自藏匿处。我们遇到了同样的问题,我们问题的根本原因是我们用于jenkins的存储实例崩溃了。在我们的案例中,重启stash解决了它。


0
投票

就我而言,我解决了这个问题

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

我的环境是在Windows中安装的Jenkins。 UI问题是警告放在工具之前解决它的原因。


0
投票

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

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

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

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

步骤1

在jenkins工作中,填写Source Code Management下的以下信息

存储库URL:ssh://git@my_server/repo.git 证书: - 无 -

第2步

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

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

第3步

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


7
投票

这是一个非常棘手的问题 - 即使你已经熟悉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服务将接受来自Web服务器的证书,该证书通过https提供存储库。配置GIT存储库URL,如

https://yourserver.com/your-repositorypath

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

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

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


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

Credentials插件1.9.4,GIT客户端插件1.6.1,Jenkins GIT插件2.0.1


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 [email protected]:adolfosrs / jenkins-test.git HEAD”)
  5. 系统会询问您是否要继续。说是的
  6. Github仓库将添加到您的known_hosts文件中:/Users/Shared/Jenkins/.ssh/
  7. 回到Jenkins门户网站并尝试使用您的Github SSH URL
  8. 它应该工作。祝好运

2
投票

请检查以下设置。这总是对我有用。

詹金斯配置:

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

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

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


2
投票

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

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

2
投票

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


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插件一起使用。


0
投票

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


0
投票

在我的例子中,我用root用户编辑了known_hosts文件。所以它将文件所有权更改为root并且jenkins用户开始抛出“[email protected]:xxxxxx / xxxx.git HEAD”返回状态码128:stdout:stderr:主机密钥验证失败“错误,同时克隆git图像。恢复所有权解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.