Jenkins git плагин с доступом ssh к bitbucket: Permission denied (publickey). fatal: Не удалось прочитать из удаленного хранилища

Я не могу подключить плагин Jenkins git для аутентификации с помощью частного репозитория git на bitbucket.org. Я создал пару частных/открытых ключей, используя ssh-keygen, и установил открытый ключ в моей учетной записи битбакет под страницей учетной записи ssh.

На странице настройки задания я установил раздел управления исходным кодом следующим образом:

Repository URL: [email protected]:mproject.git (the SSH url for clone)
Credentials: The private key id_rsa generated by ssh-keygen (no passphrase) and user git.

Он сразу же дает следующую ошибку:

Failed to connect to repository : Command "git -c core.askpass=true ls-remote -h [email protected]:myproject.git HEAD" returned status code 128:
stdout: 
stderr: Permission denied (publickey). 
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

Когда я выполняю ту же команду git из командной строки в каталоге рабочей области в оболочке, она отлично работает. У меня есть свой ~/.bashrc, указанный в пути к среде сборки/свойства, поэтому я смущен тем, что может быть другим, когда оно выполняется в задании jenkins.

У меня есть только два пользователя на моей машине jenkins (jenkins и root), и я запускал команду git как пользователь jenkins. Домашний каталог пользователя jenkins -/home/jenkins. Моя работа jenkins работает как пользователь анонимный. Может ли это быть проблемой?

У меня есть следующие .ssh файлы:

-rw-r--r--. 1 jenkins jenkins   89 Apr 25 11:18 config
-rw-r--r--. 1 jenkins jenkins  137 Apr 24 13:56 environment
-rw-------. 1 jenkins jenkins 1766 Apr 24 13:54 id_rsa
-rw-r--r--. 1 jenkins jenkins  425 Apr 24 13:54 id_rsa.pub
-rw-r--r--. 1 jenkins jenkins  806 Apr 25 12:06 known_hosts
drwx------. 2 jenkins jenkins 85 Apr 25 12:05 .ssh

Ответ 1

Я подозреваю, что вы добавили ssh-ключи своему пользователю, а не пользователю jenkins.

По умолчанию Jenkins запускается пользователем Jenkins, домашний каталог которого (по умолчанию) /var/lib/jenkins. Чтобы проверить мою гипотезу, пожалуйста, войдите как пользователь jenkins:

su jenkins

и позвоните:

git -c core.askpass=true ls-remote -h [email protected]:myproject.git HEAD

чтобы проверить, вернется ли ошибка.

У вас должен быть каталог /var/lib/jenkins/.ssh содержащий правильные ключи ssh. Вам нужно будет добавить id_rsa.pub из этого каталога в свою учетную запись на bitbucket.

Далее в настройке задания просто установите:

Repository URL: [email protected]:ntti3/gtip.git
Credentials: - none - 

Описанная конфигурация работает для моего Jenkins с bitbucket.

Также убедитесь, что в каталоге .ssh установлены правильные права доступа. Ssh не любит "слишком открытые" каталоги:

-rw-------  1 jenkins jenkins  407 Apr 14 14:14 authorized_keys
-rw-------  1 jenkins jenkins 1676 Nov 25 16:37 id_rsa
-rw-rw-r--  1 jenkins jenkins  400 Nov 25 16:38 id_rsa.pub
-rw-r--r--  1 jenkins jenkins 3096 Feb 11 12:11 known_hosts
drwx------   2 jenkins jenkins     4096 Apr 14 14:14 .ssh

Ответ 2

В моем случае проблема имела какое-то отношение к тому, что пользователь jenkins уже создан с домашним каталогом /home/jenkins, а затем установил jenkins как root. Возможно, это создало некоторую путаницу между тем, был ли домашний каталог /var/lib/jenkins (как обычно) и /home/jenkins. Исправлено:

  • userdel jenkins # Удалить пользователя jenkins
  • rm -rf/home/jenkins; rm -rf/var/lib/jenkins # Удалить предыдущие джинкины dirs
  • Установите jenkins снова как обычный процесс, который создает пользователя jenkins.
  • mkdir/var/lib/jenkins/.ssh; chmod 700/var/lib/jenkins/.ssh
  • cd/var/lib/jenkins/.ssh
  • Создайте keypair, используя ssh-keygen, добавьте ключ к битбакету и т.д.
  • Создание учетных данных в jenkins для новоиспеченного файла id_rsa
  • Создание нового проекта для использования плагина git с файлом репозитория url и id_rsa.pub

Спасибо за помощь.

Ответ 3

В моем случае проблемой был отпечаток ключа RSA. Я добавил ключ ssh для пользователя Jenkins, как описано в документации, но получил то же сообщение об ошибке. Я решил это, войдя как пользователь Jenkins, используя

sudo su jenkins

Затем я набрал следующий

git -c core.askpass=true ls-remote -h ssh://[email protected]/PROJECT/REPO.git HEAD

И получил следующее сообщение

The authenticity of host 'SERVER ([IP_ADDRESS]:PORT)' can't be established. RSA key fingerprint is 11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:ff. Are you sure you want to continue connecting (yes/no)?

Отвечая "да" на этот вопрос, сервер Bitbucket добавляется в список известных хостов, и это действительно решило мою проблему.

Ответ 4

для ssh.bash

ssh -K ${PATH}/.ssh2/id_rsa_2048_b $*

export GIT_SSH = ${PATH}/ssh.bash