36

这是我的设置:

  1. Jenkins 作为“jenkins”用户在我的 linux 机器上运行。
  2. 我已经为“jenkins”用户生成了一个 ssh 密钥对,如Linux - Setup Git中所述。
  3. 当我sudo su jenkins尝试ssh -vT git@github.com时,我总是被问到我的密码,但我总是最终被认证。(详细选项显示使用了哪个键等)。
  4. 我可以使用 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

这与我输入密码时遇到的错误相同(但当然,Jenkins 不会要求我输入密码)。以下页面:

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

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

在运行与我的“詹金斯”相同的命令时,什么也没有产生(甚至权限被拒绝)

我对这个问题的理解是密码不记得了。你有什么主意吗?我应该为 jenkins 用户启动一个 ssh-agent 或密钥环管理器吗?如何?或者转发到同一台机器时ssh转发是否合适?有什么更好的主意吗?

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

4

8 回答 8

48

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

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

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

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

  2. 将密码留空

于 2012-11-14T01:35:33.490 回答
15

总结一下 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 服务器更改地址)
于 2016-05-18T10:40:28.483 回答
10

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

于 2014-07-02T17:15:19.993 回答
5

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

sudo chown jenkins -R /var/lib/jenkins/.ssh/*
于 2013-09-25T00:32:06.203 回答
3

要检查以下内容:

  1. 如果正确的公钥(id_rsa.pub)被上传到 git-server。
  2. jenkins 用户将访问 github -> 检查是否将正确的私钥(id_rsa)复制到 /var/lib/jenkins/.ssh/
  3. 如果 known_hosts 文件是在 ~/.ssh 文件夹中创建的。尝试 ssh -vvv git@github.com 查看调试日志。如果一切顺利,github.com 将被添加到 known_hosts。
  4. 如果 id_rsa 的权限设置为 755 (chmod 755 id_rsa)

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

于 2015-11-20T13:17:24.270 回答
2

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

于 2014-05-08T17:24:07.747 回答
2

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

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

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

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)。

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

7.现在应该删除错误。

于 2016-09-27T07:03:23.400 回答
1

密钥需要从 jenkins 用户生成。

sudo su jenkins
ssh-keygen

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

于 2018-06-13T13:26:05.343 回答