我在Linux机器上配置了Jenkins,而我的git repo在另一台Linux服务器上。但是,当我尝试将回购的URL提供给Jenkins时,我收到以下错误。
Failed to connect to repository : Command "git -c core.askpass=true ls-remote -h ssh://user@ip/~/export1 HEAD" returned status code 128:
stdout:
stderr: Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
原因可能是什么?
我已经看到这两个系统' rsa密钥存在于彼此的.ssh/known_hosts
文件夹中
我能够将代码中的代码拉出或克隆到Jenkins系统中的文件夹中。那么詹金斯为什么不能接受呢?
我还尝试了网址user@ip:/fullpath/to/repo
答案 0 :(得分:2)
您需要确保Jenkins作为正确的用户(在~/.ssh/id_rsa(.pub)
该用户可能与ssh url中使用的用户不同:user @ ip表示您使用在~user/.ssh/authorized_key
中拥有公钥的帐户连接到ip。
所以Jenkins进程必须由具有私钥和公钥的帐户运行,其公钥在git服务器端的~user/.ssh/authorized_key
。
并且该帐户应该在任何ssh尝试之前完成(仅一次)ssh-keyscan -H ip >> ~account/.ssh/known_hosts
,以便将git服务器ip记录为已知主机。
这是一个简单的回购是否会对URL产生任何影响或改变?
没有。当用作URL时,裸仓库文件夹末尾的.git
是可选的。
答案 1 :(得分:0)
除了@ VonC的回复之外,您还可以使用Credentials plugin在Jenkins主服务器上定义一组凭据,Jenkins作业使用这些凭据来访问您的Git存储库。这允许您将Jenkins本身作为可以访问Git存储库的用户运行。
答案 2 :(得分:0)
主要问题是系统的安全性。我没有检查我的服务器上的身份验证机制。对git服务器的密码验证导致了问题,因为jenkins机器试图直接触发路径的ls-remote。当您在终端上执行相同操作时,系统将提示您输入密码然后接受。当我将密码身份验证和UsePAM设置为no并在sshd_config文件中启用RSA身份验证,pubkey身份验证和授权密钥设置为yes并重新启动时,它能够访问repo并且我得到此错误。