詹金斯:无法连接到存储库

Posted

技术标签:

【中文标题】詹金斯:无法连接到存储库【英文标题】:Jenkins: Failed to connect to repository 【发布时间】:2014-02-28 17:56:38 【问题描述】:

我正在尝试在 github 存储库上连接 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。

【问题讨论】:

确保您以运行 Jenkins 的用户身份登录并检查与 githib 的连接 “以 Jenkins 运行的用户身份登录”是什么意思?在哪里登录?我可以克隆 repo,这样我就可以与 github 建立联系。 Jenkins 以用户 jenkins 运行,并且有自己的 .ssh 目录来存储公钥和 known_hosts 的列表。 试试 sudo -i -u jenkins; git clone git@github.com:adolfosrs/jenkins-test.git 好的。你说的对。但现在我得到“无法将主机添加到已知主机列表(/var/lib/jenkins/.ssh/known_hosts)。权限被拒绝(公钥)。”有什么想法吗? 【参考方案1】:

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

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

chown jenkins id_rsa.pub 
chown jenkins id_rsa

【讨论】:

我仍然得到 Permission denied (publickey)。【参考方案2】:

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

    切换到 jenkins 用户 (sudo -iu jenkins) 运行:ssh-keygen(注意 - 您现在正在为 jenkins 用户创建 ssh 密钥对。您应该看到如下内容:输入要保存密钥的文件 (/Users/Shared/Jenkins/.ssh/id_rsa) : 一直按 Enter 输入默认值直到结束 在您的终端上运行 Jenkins 错误消息中显示的命令(例如:“git ls-remote -h git@github.com:adolfosrs/jenkins-test.git HEAD”) 系统将询问您是否要继续。说是 Github 存储库将添加到您的 known_hosts 文件中:/Users/Shared/Jenkins/.ssh/ 返回 Jenkins 门户并尝试您的 Github SSH url 它应该可以工作。祝你好运

【讨论】:

【参考方案3】:

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

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

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

由于 jenkins 无法从其用户目录中选择私有 ssh 密钥,因此引发此错误。我通过以下方式解决了这个问题

步骤 1

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

存储库

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

第二步

在我的设置中,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下即可

第三步

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

【讨论】:

【参考方案4】:

这是一个非常棘手的问题 - 即使您熟悉使用证书在 https 中的工作方式(OTOH,如果您看到我的解决方法,这似乎很合乎逻辑:)

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

git config [--global] http.sslCAInfo "证书"

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

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

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

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

... -Djavax.net.ssl.trustStore="keystore" ...

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

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

现在 Jenkins 服务将接受来自通过 https 提供存储库的网络服务器的证书。配置 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

【讨论】:

好吧,我忘了提到我 - 在我的上下文中 - 不是在谈论 GITHUB,而是一个只能通过 https 传输访问的自己的存储库服务器 :)【参考方案5】:

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

【讨论】:

是的,刚刚为 CentOS 做了一个sudo yum install git,而 Jenkins 为 git repo 工作。【参考方案6】:

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

Jenkins 配置:

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

2) 提供 SSH 仓库链接 git@blahblah

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

【讨论】:

Select Username and Authentication key 是什么意思?没有这样确切的选择。 认证密钥是你连接GIT服务器的私钥 确切的选项是SSH Username with private key,您也可以直接插入您在GitHub上生成的私钥或从您的Jenkins主文件系统中选择具有私钥的文件。【参考方案7】:

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

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

确保将 Jenkins 密钥添加为 GitHub(或类似)中具有 RW 访问权限的部署密钥 - 为此使用 id_rsa.pub 密钥。

现在一切都应该与 SCM 同步插件配合使用。

【讨论】:

没有用。不得不手动将私钥添加到 jenkins UI,这很奇怪 @prayagupd 我还必须将在 Jenkins 容器中生成的私钥添加为 Jenkins UI 中的“凭据”,以允许代码克隆。【参考方案8】:

Jenkins 以另一个用户身份运行,而不是以您的普通登录身份运行。 所以,这样做来解决ssh问题:

    以詹金斯su jenkins登录 (您可能首先必须执行sudo passwd jenkins 才能设置jenkins 的密码。我找不到默认密码...) 生成 ssh 密钥对:ssh-keygen 将公钥 (id_rsa.pub) 复制到您的 github 帐户(或其他任何地方) 克隆 repo 作为 jenkins 以便将主机添加到 jenkins known_hosts 这是必要的。现在,您可以根据需要再次删除克隆的 repo。

【讨论】:

我认为将主机添加到 jenkins known_hosts 可以解决问题,我只尝试使用 ssh 密钥,干杯!【参考方案9】:

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

【讨论】:

【参考方案10】:

就我而言,我通过

解决了这个问题 单击“凭据”文本旁边的按钮添加 添加凭据(loginpassword) 在添加按钮左侧的弹出菜单中选择这些凭据 等待几秒钟

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

【讨论】:

【参考方案11】:

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

【讨论】:

【参考方案12】:

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

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

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

【讨论】:

【参考方案13】:

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

【讨论】:

以上是关于詹金斯:无法连接到存储库的主要内容,如果未能解决你的问题,请参考以下文章

TortiseSVN svn+ssh 错误:无法连接到 URL 上的存储库...网络连接意外关闭

Jenkins无法连接到gitea存储库

Intellij 无法连接到本地 m2 存储库

无法将 Github 组织存储库连接到 AWS Amplify 应用程序

尝试连接到 SVN 存储库时出错

无法将 Spring 云配置服务器连接到本地存储库窗口