我正在尝试在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。
答案 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,如
请注意,您仍需要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上解决它的方式是:
答案 3 :(得分:2)
使用以下设置进行检查。这总是对我有用。
詹金斯配置:
1)检查是否正确指定了git可执行文件
2)提供SSH存储库链接git @ blahblah
3)在凭据>>下选择用户名和身份验证密钥(转到您的服务器,生成SSH密钥ssh-keygen ...将密钥复制到JENKINS_HOME /,ssh)您应该能够从Jenkins连接到您的GIT存储库
答案 4 :(得分:2)
Jenkins作为另一个用户运行,而不是普通登录。 所以,这样做可以解决ssh问题:
su jenkins
身份登录
(你可能首先必须{j} sudo passwd jenkins
才能设置jenkins的密码。我找不到默认值...)ssh-keygen
id_rsa.pub
)复制到您的github帐户(或任何地方)known_hosts
,这是必要的。现在,如果愿意,您可以再次删除克隆的仓库。答案 5 :(得分:2)
在我们的案例中,必须在Jenkins服务器上安装git
。
答案 6 :(得分:1)
在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 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/
答案 10 :(得分:0)
到目前为止,这里没有提及,但这也可能来自藏匿处。 我们遇到了同样的问题,导致问题的根本原因是我们用于詹金斯的存储实例崩溃了。 重新启动存储可以解决我们的情况。
答案 11 :(得分:0)
就我而言,我通过
解决了此问题login
和password
)我的环境是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私钥。我以以下方式解决了这个问题
在詹金斯工作中,在Source Code Management
下填写以下信息
存储库
存储库URL:ssh://git@my_server/repo.git
凭证:-none-
在我的设置中,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
将公共密钥添加到GIT服务器帐户。运行jenkins作业,现在您应该能够通过jenkins的ssh连接到GIT帐户。