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

n9vozmp4  于 2023-10-17  发布在  Jenkins
关注(0)|答案(9)|浏览(206)

以下是我的设置:

  1. Jenkins在我的Linux机器上以jenkins用户的身份运行。
    1.我已经为'jenkins'用户生成了一个ssh密钥对,如Linux - Setup Git中所述。
    1.当我sudo su jenkins和尝试ssh -vT [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)时,我总是被问到我的密码,但我最终总是被认证。(verbose选项显示使用了哪个键,等等)。
    1.我可以使用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.

到目前为止,我一直严格按照指示行事。问题是Jenkins作业失败,并出现以下错误:

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

这和我输入密码时得到的错误是一样的(当然,Jenkins不会问我密码)。以下页面:

这向我表明,ssh-agent可以帮助记住密码,当我使用自己用户时,它可以做到这一点,但不能记住 jenkins ID。请注意,当我以普通用户身份运行时,会产生:

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

当运行与我的“jenkins”相同的命令时,什么也不会产生(甚至没有拒绝权限)

我对这个问题的理解是密码不被记住。你知道吗?我应该为jenkins用户启动一个ssh代理或密钥环管理器吗?怎么做?或者ssh转发适合转发到同一台机器吗?有更好的主意吗?

ps:我从来没有sudo gitted,我总是使用Jenkins或我的用户帐户(如在这SO后提到-Ubuntu/GitHub SSH Key Issue

t98cgbkg

t98cgbkg1#

由于几个月来没有人从评论中写下答案,我很快就会这样做。
有两个可能的问题/解决方案:
1.使用错误的用户创建id_rsa
创建id_rsa作为jenkins用户(参见hudson cannot fetch from git repository
1.将密码保留为空

pdkcd3nj

pdkcd3nj2#

总结一下在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 [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection)(根据您的git服务器更改地址)
okxuctiv

okxuctiv3#

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

wtlkbnrh

wtlkbnrh4#

我想补充的是,如果你手工创建了密钥,它们可能仍然归你所有,而Jenkins无法读取,试试:

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

8gsdolmq5#

要检查的内容如下:
1.如果正确的公钥(id_rsa.pub)被上传到git-server。
1.如果正确的私钥(id_rsa)被复制到/var/lib/jenkins/.ssh/,则jenkins用户将访问github ->到github *
1.如果known_hosts文件是在~/.ssh文件夹中创建的。尝试ssh -vvv email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)查看调试日志。如果一切顺利,github.com将被添加到known_hosts。
1.
如果id_rsa的权限设置为755(chmod 755 id_rsa)*
在所有检查之后-> try**ssh -vvv email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)**不要尝试在jenkins中进行配置,直到ssh工作!

enxuqcxy

enxuqcxy6#

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

vngu2lb8

vngu2lb87#

对于Mac用户,可以通过以下步骤删除现有密钥并创建新的私钥和公钥来解决此问题:
1.删除位于**/Users/.ssh的所有公钥和私钥**
2.删除Jenkins中Credentials选项卡下保存的所有凭据。
3.删除Github仓库设置中定义的现有SSH公钥
4.创建新的SSH密钥(私有和公共:id_rsa和id_rsa.pub),请按照www.example.com中的步骤https://confluence.atlassian.com/bitbucketserver/creating-ssh-keys-776639788.html#CreatingSSHkeys-CreatinganSSHkeyonLinux&MacOSX
5.在Github或等效的Repository Settings中设置新创建的SSH公钥id_rsa.pub。
6.在Jenkins中,通过为您的Github用户名添加SSH私钥(id_rsa)来创建新凭据
7.现在应该删 debugging 误。

qxgroojn

qxgroojn8#

密钥需要从Jenkins用户生成。

sudo su jenkins
ssh-keygen

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

p4tfgftt

p4tfgftt9#

我通过使用私钥创建凭证解决了这个问题。这样我就不需要担心操作系统中私钥文件的权限。
1.创建新的凭证类型“SSH SSL with private key”。
1.给予Github用户ID。
1.选中单选按钮“私钥->直接输入”,然后点击添加按钮从操作系统(.ssh/id_rsa)复制粘贴私钥文件内容并保存。
现在,在管道中,给予Github repo URL和SSH,并选择这个新的凭据。

相关问题