在Ubuntu上使用Jenkins用户从GitHub获取时,权限被拒绝(公钥)

时间:2012-05-14 19:41:12

标签: github jenkins ubuntu-11.04 ssh-keys

这是我的设置:

  1. Jenkins作为'jenkins'用户在我的linux机器上运行。
  2. 我为{jenkins'用户生成了Linux - Setup Git中描述的ssh密钥对。
  3. 当我sudo su jenkins并尝试ssh -vT git@github.com时,我总是被问到我的密码,但我总是最终被认证。 (详细选项显示使用了哪个键)。
  4. 我可以使用jenkins从GitHub克隆我的回购:
  5. 所以:

    jenkins@alpm:~/jobs/test git/workspace$ git pull 
    Enter passphrase for key '/var/lib/jenkins/.ssh/id*_rsa':
    Already up-to-date.
    

    到目前为止,我已按照信中的说明进行操作。问题是Jenkins作业失败并出现以下错误:

    status code 128:
    stdout: 
    stderr: Permission denied (publickey).
    fatal: The remote end hung up unexpectedly
    

    这与我在输入密码短语时得到的错误相同(当然,詹金斯并没有问我密码短语)。以下几页:

    告诉我,ssh-agent可以帮助记住密码,当我使用自己的用户时,它会执行,而不是 jenkins id。请注意,以普通用户身份运行时会产生:

    echo "$SSH_AUTH_SOCK"
    /tmp/keyring-nQlwf9/ssh
    

    虽然运行与我的'jenkins'相同的命令但没有产生任何结果(甚至没有拒绝许可)

    我对这个问题的理解是不会记住密码短语。 你有什么主意吗? 我应该为jenkins用户启动ssh-agent或密钥环管理器?怎么样? 或转发到同一台机器时ssh转发是否合适? 有更明智的想法吗?

    ps:我从不sudo gitted,我总是使用jenkins或我的用户帐户(如此SO帖子所述 - Ubuntu/GitHub SSH Key Issue

8 个答案:

答案 0 :(得分:39)

由于几个月没有人从评论中写出答案,我很快就会这样做。

有两个可能的问题/解决方案:

  1. 使用错误的用户创建的id_rsa

    创建id_rsa作为jenkins用户(请参阅hudson cannot fetch from git repository

  2. 将密码留空

答案 1 :(得分:8)

我通过在创建密钥时将密码短语留空来解决这个问题。

答案 2 :(得分:7)

总结Jenkins服务器上必须做的事情:

# 1. Create the folder containing the SSH keys if necessary
if [ ! -e ~jenkins/.ssh ]; then mkdir ~jenkins/.ssh; fi
cd ~jenkins/.ssh/

# 2. Create the SSH pair of keys
# The comment will help to identify the SSH key on target systems
ssh-keygen -C "jenkins" -f ~jenkins/.ssh/id_rsa -P ""

# 3. Assign the proper access rights
chown -R jenkins ~jenkins/.ssh/
chmod 700 ~jenkins/.ssh
chmod 600 ~jenkins/.ssh/*

记住:

  • 请保留默认" id_rsa"生成密钥时的名称,如" id_rsa_jenkins"即使设置正确,也不会工作。
  • 请勿使用密码短语
  • 检查公钥(id_rsa.pub)是否已上传到git服务器(GitHub,Bitbucket等)。完成后,运行以下命令测试SSH密钥:ssh -vvv git@github.com(根据您的git服务器更改地址)

答案 3 :(得分:3)

我想补充一点,如果你手工创建了密钥,它们可能仍归你所有,jenkins无法读取,请尝试:

sudo chown jenkins -R /var/lib/jenkins/.ssh/*

答案 4 :(得分:2)

要检查以下内容:

  1. 如果将正确的公钥(id_rsa.pub)上传到git-server。
  2. jenkins用户将访问github - >如果正确的私钥(id_rsa)被复制到/var/lib/jenkins/.ssh /
  3. ,请检查
  4. 如果在〜/ .ssh文件夹中创建了known_hosts文件。尝试使用ssh -vvv git@github.com查看调试日志。如果事情进展顺利,github.com将被添加到known_hosts。
  5. 如果id_rsa的权限设置为755(chmod 755 id_rsa)
  6. 所有检查后 - >尝试 ssh -vvv git@github.com 不要尝试在jenkins中进行配置,直到ssh工作!

答案 5 :(得分:1)

如果您在Windows中将jenkins作为服务运行,则需要验证运行服务的用户。如果您使用用户“MACHINENAME \ user”创建了密钥,请更改服务,以便运行它的用户可以匹配

答案 6 :(得分:1)

对于Mac用户,可以通过以下步骤删除现有密钥并创建新的私钥和公钥来解决此问题:

1.删除位于 /Users/Username/.ssh 的所有公钥和私钥

2.删除Jenkins中凭据标签下保存的所有凭据。

3.删除 Github存储库设置中定义的现有公共SSH密钥

4.按照https://confluence.atlassian.com/bitbucketserver/creating-ssh-keys-776639788.html#CreatingSSHkeys-CreatinganSSHkeyonLinux&MacOSX

中的步骤创建新的 SSH密钥(私有和公共:id_rsa和id_rsa.pub)

5.在 Github或等效的存储库设置中设置新创建的公共SSH密钥(id_rsa.pub)。

<\ n> 6.在Jenkins中,通过为您的Github用户名添加私有SSH密钥(id_rsa)来创建新凭据

7.现在应该删除错误。

答案 7 :(得分:0)

密钥需要从jenkins用户生成。

sudo su jenkins
ssh-keygen

生成密钥后,应将其添加为bitbucket或github中的ssh密钥。