我正在尝试在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。
问题是我以某种方式用root用户创建了ssh文件。所以文件所有者是root。
解决方案只是将所有权更改为jenkins用户。
chown jenkins id_rsa.pub
chown jenkins id_rsa
确保将RSA主机密钥和bitbucket服务器的IP添加到“已知主机”文件中。内容应该是这样的
bitbucket.org,xx.xx.xx.xx ssh-rsa host_key
请记住将/var/lib/jenkins/.ssh/
中所有文件的所有权更改为Jenkins
到目前为止,这里没有提到,但这也可能来自藏匿处。我们遇到了同样的问题,我们问题的根本原因是我们用于jenkins的存储实例崩溃了。在我们的案例中,重启stash解决了它。
就我而言,我解决了这个问题
login
和password
)我的环境是在Windows中安装的Jenkins。 UI问题是警告放在工具之前解决它的原因。
当我尝试将我的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密钥。我用以下方式解决了这个问题
在jenkins工作中,填写Source Code Management
下的以下信息
库
存储库URL:ssh://git@my_server/repo.git 证书: - 无 -
在我的设置中,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帐户。
这是一个非常棘手的问题 - 即使你已经熟悉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,如
请注意,您仍然需要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
我有同样的问题。我在Mac上解决它的方式是这样的:
请检查以下设置。这总是对我有用。
詹金斯配置:
1)检查是否正确指定了git可执行文件
2)提供SSH存储库链接git @ blahblah
3)在凭据>>选择用户名和身份验证密钥(转到您的服务器,生成SSH密钥ssh-keygen ...将密钥复制到JENKINS_HOME /,ssh)您应该能够从Jenkins连接到您的GIT存储库
Jenkins作为另一个用户运行,而不是普通登录。所以,这样做可以解决ssh问题:
su jenkins
身份登录(您可能首先必须执行sudo passwd jenkins
才能设置jenkins的密码。我找不到默认值...)ssh-keygen
id_rsa.pub
)复制到您的github帐户(或任何地方)known_hosts
,这是必要的。现在,如果您愿意,可以再次删除克隆的仓库。在我们的例子中,git
必须安装在Jenkins服务器上。
在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插件一起使用。
让我在这里补充说,可能产生此类错误的一个非常小的问题是存储库URL中缺少.git
扩展。确保输入以.git
结尾的完全限定URL。我使用bitbucket所以我所做的就是点击'clone',我会自动生成完全限定的URL。与github有类似的方法。
在我的例子中,我用root用户编辑了known_hosts文件。所以它将文件所有权更改为root并且jenkins用户开始抛出“[email protected]:xxxxxx / xxxx.git HEAD”返回状态码128:stdout:stderr:主机密钥验证失败“错误,同时克隆git图像。恢复所有权解决了这个问题。