使用ssh访问bitbucket的Jenkins git插件:权限被拒绝(publickey)。致命:无法从远程存储库中读取

时间:2015-04-27 03:23:14

标签: git ssh jenkins bitbucket

我无法通过bitbucket.org上的私人git repo获取Jenkins git插件进行身份验证。我使用ssh-keygen生成了私钥/公钥对,并在ssh密钥帐户页面下的bitbucket帐户中设置了公钥。

在作业配置页面中,我按如下方式设置了“源代码管理”部分:

Repository URL: git@bitbucket.org:mproject.git (the SSH url for clone)
Credentials: The private key id_rsa generated by ssh-keygen (no passphrase) and user git.

它立即出现以下错误:

Failed to connect to repository : Command "git -c core.askpass=true ls-remote -h git@bitbucket.org:myproject.git HEAD" returned status code 128:
stdout: 
stderr: Permission denied (publickey). 
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

当我在shell中的工作区目录中从命令行执行相同的git命令时,它可以正常工作。我在构建环境/属性文件路径中指定了〜/ .bashrc,所以当我在jenkins工作中运行时,我感到很困惑。

我的jenkins机器上只有两个用户(jenkins和root),我正在以用户jenkins的身份运行git命令。用户jenkins的主目录是/ home / jenkins。我的jenkins工作以匿名用户身份运行。这可能是问题吗?

我有以下.ssh文件:

-rw-r--r--. 1 jenkins jenkins   89 Apr 25 11:18 config
-rw-r--r--. 1 jenkins jenkins  137 Apr 24 13:56 environment
-rw-------. 1 jenkins jenkins 1766 Apr 24 13:54 id_rsa
-rw-r--r--. 1 jenkins jenkins  425 Apr 24 13:54 id_rsa.pub
-rw-r--r--. 1 jenkins jenkins  806 Apr 25 12:06 known_hosts
drwx------. 2 jenkins jenkins 85 Apr 25 12:05 .ssh

4 个答案:

答案 0 :(得分:16)

我怀疑,你已经为你的用户添加了ssh密钥,而不是jenkins用户。

默认情况下Jenkins由用户Jenkins运行,主目录是(默认情况下)/var/lib/jenkins。 要检查我的假设,请以jenkins用户身份登录:

su jenkins

并致电:

git -c core.askpass=true ls-remote -h git@bitbucket.org:myproject.git HEAD

检查是否会返回错误。

您应该有/var/lib/jenkins/.ssh目录,其中包含正确的ssh个密钥。您需要将该目录中的id_rsa.pub添加到bitbucket上的帐户中。

接下来在作业配置中设置:

Repository URL: git@bitbucket.org:ntti3/gtip.git
Credentials: - none - 

所描述的配置适用于我的Jenkins和bitbucket。

还请确保.ssh目录已设置适当的访问权限。 Ssh不喜欢太开放'目录:

-rw-------  1 jenkins jenkins  407 Apr 14 14:14 authorized_keys
-rw-------  1 jenkins jenkins 1676 Nov 25 16:37 id_rsa
-rw-rw-r--  1 jenkins jenkins  400 Nov 25 16:38 id_rsa.pub
-rw-r--r--  1 jenkins jenkins 3096 Feb 11 12:11 known_hosts
drwx------   2 jenkins jenkins     4096 Apr 14 14:14 .ssh

答案 1 :(得分:3)

在我的情况下,问题与已经使用主目录/ home / jenkins创建jenkins用户然后以root身份安装jenkins有关。这可能会在主目录是/ var / lib / jenkins(正常)和/ home / jenkins之间造成一些混淆。修复是:

  1. userdel jenkins #Delete jenkins user
  2. rm -rf / home / jenkins; rm -rf / var / lib / jenkins #Remove old jenkins dirs
  3. 再次安装jenkins作为创建jenkins用户的正常流程
  4. mkdir /var/lib/jenkins/.ssh; chmod 700 /var/lib/jenkins/.ssh
  5. cd /var/lib/jenkins/.ssh
  6. 使用ssh-keygen创建密钥对,将密钥添加到bitbucket等。
  7. 在jenkins中为新创建的id_rsa文件创建凭证
  8. 创建新项目以将git插件与存储库URL和id_rsa.pub文件一起使用
  9. 感谢您的帮助。

答案 2 :(得分:0)

就我而言,问题是RSA密钥指纹。我按照文档中的描述添加了Jenkins用户的ssh密钥,但得到了相同的错误消息。我通过使用

以Jenkins用户身份登录来解决它
generateImageURL

然后,我输入以下内容

sudo su jenkins

并收到以下消息

git -c core.askpass=true ls-remote -h ssh://git@SERVER/PROJECT/REPO.git HEAD

回答“是”'对于这个问题,Bitbucket服务器被添加到已知主机列表中,这确实解决了我的问题。

答案 3 :(得分:0)

表示ssh.bash

ssh -K ${PATH}/.ssh2/id_rsa_2048_b $*

export GIT_SSH = ${PATH}/ssh.bash