詹金斯:无法连接到存储库
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_rsa
和 id_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】:就我而言,我通过
解决了这个问题 单击“凭据”文本旁边的按钮添加 添加凭据(login
和 password
)
在添加按钮左侧的弹出菜单中选择这些凭据
等待几秒钟
我的环境是安装在 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 上的存储库...网络连接意外关闭