首页 文章

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

提问于
浏览
29

这是我的设置:

  • Jenkins作为'jenkins'用户在我的linux机器上运行 .

  • 我为'jenkins'用户生成了Linux - Setup Git中描述的ssh密钥对 .

  • 当我 sudo su jenkins 并尝试 ssh -vT git@github.com 时,我总是被问到我的密码,但我总是最终被认证 . (详细选项显示使用了哪个键) .

  • 我可以使用jenkins从GitHub克隆我的回购:

正是如此:

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'相同的命令但没有产生任何结果(甚至没有权限被拒绝)

My understanding of the problem is that the passphrase is not remembered. Do you have any idea? Shall I start a ssh-agent or key ring manager for the jenkins user? How? Or is ssh forwarding suitable when forwarding to the same machine? Any brighter idea?

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

8 回答

  • 2

    要检查以下内容:

    • 如果正确的公钥(id_rsa.pub)上传到git-server .

    • jenkins用户将访问github - >检查 if the right private key (id_rsa) is copied to /var/lib/jenkins/.ssh/

    • 如果在〜/ .ssh文件夹中创建了known_hosts文件 . 尝试使用ssh -vvv git@github.com查看调试日志 . 如果事情进展顺利,github.com将被添加到known_hosts .

    • if the permission of id_rsa is set to 755 (chmod 755 id_rsa)

    在所有检查之后 - >尝试 ssh -vvv git@github.com 不要尝试在jenkins中进行配置,直到ssh工作!

  • 0

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

  • 39

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

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

    • id_rsa使用错误的用户创建

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

    • 将密码保留为空
  • 7

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

  • 3

    总结一下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服务器更改地址)

  • 8

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

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

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

    1.删除位于 /Users/Username/.ssh 的所有 Public and Private keys

    2.删除Jenkins中 Credentials 选项卡下保存的所有凭据 .

    3.删除 Github Repository Settings. 中定义的现有 Public SSH keys

    4.按照https://confluence.atlassian.com/bitbucketserver/creating-ssh-keys-776639788.html#CreatingSSHkeys-CreatinganSSHkeyonLinux&MacOSX中的步骤创建新的 SSH keys (private and public: id_rsa and id_rsa.pub)

    5.在 Github or an equivalent Repository Settings. 中设置新创建的公共SSH密钥(id_rsa.pub)

    6.在Jenkins, create new credentials 加入 private SSH key(id_rsa) for your Github username.

    7.现在应该删除错误 .

  • 1

    密钥需要从jenkins用户生成 .

    sudo su jenkins
    ssh-keygen
    

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

相关问题