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

pim*_*jor 31 github ssh-keys jenkins ubuntu-11.04

这是我的设置:

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

正是如此:

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

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

status code 128:
stdout: 
stderr: Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)

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

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

echo "$SSH_AUTH_SOCK"
/tmp/keyring-nQlwf9/ssh
Run Code Online (Sandbox Code Playgroud)

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

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

ps:我从来没有sudo gitted,我总是使用jenkins或我的用户帐户(如此SO帖子中提到的 - Ubuntu/GitHub SSH密钥问题)

Pat*_*oos 41

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

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

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

    创建id_rsa作为jenkins用户(请参阅hudson无法从git存储库获取)

  2. 将密码保留为空

  • 谢谢!离开密码短语解决了这个问题. (5认同)
  • 将密码保留为空解决了它,使用密码我收到了上述错误,谢谢! (2认同)

Mar*_*ona 9

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

  • 证实.这意味着尽管具有带密码短语UI的凭据存储,但Jenkins无法处理SSH密钥上的密码短语.这是一个安全漏洞.https://issues.jenkins-ci.org/browse/JENKINS-20879 (4认同)

Pau*_*sek 9

总结一下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/*
Run Code Online (Sandbox Code Playgroud)

记得:

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


小智 5

我想补充一点,如果您手动创建密钥,它们可能仍然归您所有,并且詹金斯无法读取,请尝试:

sudo chown jenkins -R /var/lib/jenkins/.ssh/*
Run Code Online (Sandbox Code Playgroud)