Не удалось подтвердить ключ хоста Jenkins

164

У меня проблема с Дженкинсом , настройка "git", показывает следующую ошибку:

Failed to connect to repository : Command "git ls-remote -h https://person@bitbucket.org/person/projectmarket.git HEAD" returned status code 128:
stdout:
stderr: fatal: Authentication failed

Я проверил с SSH :

git@bitbucket.org:person/projectmarket.git

Это ошибка:

Failed to connect to repository : Command "git ls-remote -h git@bitbucket.org:person/projectmarket.git HEAD" returned status code 128:
stdout:
stderr: Host key verification failed.
fatal: The remote end hung up unexpectedly

Я также сделал эти шаги с "ключом SSH".

Войти под Jenkins

sudo su jenkins

Скопируйте ключ github в папку Jenkins .ssh

cp ~/.ssh/id_rsa_github* /var/lib/jenkins/.ssh/

Переименовать ключи

mv id_rsa_github id_rsa
mv id_rsa_github.pub id_rsa.pub

но все еще не работает git- репозиторий в jenkins .

спасибо за помощь!

А. М. Мерида
источник

Ответы:

183

Перейдите к jenkinsпользователю и выполните команду вручную:

git ls-remote -h git@bitbucket.org:person/projectmarket.git HEAD

Вы получите стандартное предупреждение SSH при первом подключении к новому хосту через SSH:

The authenticity of host 'bitbucket.org (207.223.240.181)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)?

Введите yesи нажмите Enter. Ключ хоста bitbucket.orgтеперь будет добавлен в ~/.ssh/known_hostsфайл, и вы больше не получите эту ошибку в Jenkins.

CTC
источник
6
показать это: В доступе отказано (publickey). фатальный: удаленный конец неожиданно зависает
AM Mérida
6
Да, но это совсем другая ошибка. Теперь вам нужно добавить свой открытый ключ в хранилище на bitbucket.org.
ctc
2
+1 за "worksforme", была точно такая же проблема. Создал id_rsa для соответствующего пользователя, chmod-ed to jenkins, добавил открытый ключ, все еще не работал. Попытка использовать git в качестве sudo -u jenkins дала файл knonwn_hosts, чтобы устранить проблему.
Сибидиба
3
Вы должны запустить его как пользователь, который запускает Jenkins. В большинстве систем обычно запускается как отдельный пользователь (например, пользователь jenkins). Следовательно, вам необходимо переключиться на этого пользователя, чтобы убедиться, что адрес для bitbucket.org добавлен в ~ / .ssh / known_hosts.
ctc
43

Jenkins - это служебная учетная запись, она не имеет оболочки по дизайну. Общепринято, что сервисные аккаунты. не должен быть в состоянии войти в систему в интерактивном режиме.

Чтобы устранить ошибку «Не удалось подтвердить ключ хоста Jenkins», выполните следующие действия. Я использовал ртутный с Дженкинс.

1) Выполните следующие команды на терминале

             $ sudo su -s /bin/bash jenkins

предоставить пароль

2) Создайте открытый закрытый ключ, используя следующую команду:

              ssh-keygen

вы можете увидеть вывод как ::

Generating public/private rsa key pair. 
Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

3) Нажмите Enter -> Не вводите парольную фразу -> нажмите enter

             Key has been generated

4) перейти к -> cat /var/lib/jenkins/.ssh/id_rsa.pub

5) Скопируйте ключ из id_rsa.pub

6) Выход из Баш

7) ssh@yourrepository

8) vi .ssh/authorized_keys

9) Вставьте ключ

10) выход

11) Вручную войти в Mercurial сервер

Примечание: пожалуйста, авторизуйтесь вручную, иначе jenkins снова выдаст ошибку «Ошибка проверки хоста»

12) После того, как сделано вручную, теперь перейдите к Дженкинс и дайте построить

Наслаждаться!!!

Удачи

Фероз Ахмед Ансари
источник
Какой пароль запрашивается здесь?
IceFire
26

Или вы можете использовать:

ssh -oStrictHostKeyChecking=no host

Это будет небезопасно (человек в середине атаки), но самое простое решение.

Лучший способ сделать это - генерировать правильные сопоставления между хостом и IP-адресом, поэтому sshне будет жаловаться:

#!/bin/bash

for domain in "github.com" "bitbucket.org"; do
    sed -i "/$domain/d" ~/.ssh/known_hosts
    line=$(ssh-keyscan $domain,`nslookup $domain | awk '/^Address: / { print $2 ; exit }'`)
    echo $line >> ~/.ssh/known_hosts
done

Выдержка из сущности .

FelikZ
источник
3
Это открывает вас для потенциальных атак MITM.
ctc
1
Вы можете добавить -oStrictHostKeyChecking = no и подключиться один раз, что добавит хост в файл known_hosts (так же, как когда вы вводите ssh в командную строку и набираете yes, чтобы добавить ключ в файл known_hosts), а затем удалите эту опцию после этого.
Крупан
6

Была такая же проблема, я исправляю это так:

сбросить права на id_rsa * только для текущего пользователя нет группы нет другой

chmod o-rwx ~/.ssh/id*
chmod G-rwx ~/.ssh/id*

ls -lart ~/.ssh/


-rw-------  1 jenkins nogroup  398 avril  3 09:34 id_rsa.pub
-rw-------  1 jenkins nogroup 1675 avril  3 09:34 id_rsa

И очистить ~ / .ssh / know_hosts

Теперь подключайтесь как Дженкинс

sudo su jenkins

Попробуйте команды Дженкинса

git ls-remote -h git@bitbucket.org:user/project.git HEAD

Если проблем не возникнет, теперь Дженкинс сможет подключиться к репо (по крайней мере, для меня ^^)

Loodub
источник
1
Приведенная выше команда (chmod G-rwx ~ / .ssh / id *) для изменения разрешения группы не выполнена. Ниже работает как хотелось. chmod g-rwx ~ / .ssh / id *
самайтра
3
  • Убедитесь, что мы не редактируем ни одно из свойств sshd_config по умолчанию, чтобы пропустить ошибку

  • Ошибка проверки хоста - определенно отсутствует запись имени хоста в known_hostsфайле

  • Войдите на сервер, где происходит сбой процесса, и сделайте следующее:

    1. Sudo для пользователя, выполняющего процесс

    2. ssh-copy-id destinationuser@destinationhostname

    3. В первый раз он выдаст запрос, скажите «да» и впервые запросит пароль:

      The authenticity of host 'sample.org (205.214.640.91)' can't be established.
      RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
      Are you sure you want to continue connecting (yes/no)? *yes*
      

      Пароль подсказывает? дать пароль

    4. Теперь с сервера, на котором запущен процесс, делайте ssh destinationuser@destinationhostname. Он должен войти без пароля.

      Примечание: не изменяйте разрешения по умолчанию для файлов в каталоге пользователя .ssh , у вас возникнут различные проблемы

GANESH
источник
на шаге 3 может быть так, что вам будет предложено ввести ключ, уже существующий в файле, но вы должны продолжить эти 4 шага, и если вы можете войти без пароля от пользователя jenkins, то все готово.
Ракибул Хак
3

Что касается обходного пути (например, ведомого Windows), определите следующую переменную среды в глобальных свойствах:

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"

Дженкинс, Глобальные свойства, Переменные среды, GIT_SSH_COMMAND

Примечание: если вы не видите эту опцию, вам, вероятно, понадобится плагин EnvInject .

kenorb
источник
3

Скопируйте ключи хоста как из bitbucket, так и из github:

ssh root@deployserver 'echo "$(ssh-keyscan -t rsa,dsa bitbucket.org)" >> /root/.ssh/known_hosts'
ssh root@deployserver 'echo "$(ssh-keyscan -t rsa,dsa github.com)" >> /root/.ssh/known_hosts'
Марко М
источник
2

Наилучший способ - использовать URL-адрес «git» в формате URL «https» в Jenkinsfile или где угодно.

git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'

Нитин
источник
2

SSH

Если вы пробуете его по SSH, то ошибка проверки ключа хоста может возникнуть по нескольким причинам. Выполните эти шаги, чтобы преодолеть все причины.

  1. Установите переменную Environment как HOME и укажите адрес в качестве корневого каталога папки .ssh . Например: - Если ваш .ssh хранится в папке Name . C: / Users / имя.
  2. Теперь убедитесь, что открытый ключ SSH также предоставляется в ссылке на репозиторий. Либо это GitHub или BitBucket или любой другой.
  3. Откройте git bash. И попробуйте клонировать проект из репозитория. Это поможет добавить URL вашего хранилища в файл known_host, который автоматически создается в папке .ssh.
  4. Теперь откройте Дженкинс и создайте новую работу. Затем нажмите на настроить.
  5. укажите URL-адрес клонирования в разделе «Управление исходным кодом» в Git. URL должен начинаться с git@github.com / ......... или ssh: // proje ........
  6. В поле Credential вам необходимо добавить имя пользователя и пароль вашей формы репозитория, которую вы клонируете в проекте. Выберите эти учетные данные.
  7. А теперь примените и сохраните конфигурацию.
  8. Бинго! Начните строить проект. Я надеюсь, что теперь вы не получите никакой ошибки подтверждения ключа хоста!
Прем Чоудхари
источник
2
  1. войдите как jenkins используя: "sudo su -s / bin / bash jenkins"
  2. git клонирует нужный репозиторий, который вызывает ошибку ключа
  3. он попросит вас добавить ключ, показывая Да / Нет (введите yes или y)

Это оно!

Теперь вы можете перезапустить работу Дженкинса.

Я надеюсь, что это исправит вашу проблему.

Тимоти Асир
источник
2

Я столкнулся с этой проблемой, и оказалось, что проблема в том, что служба jenkins не запускалась как пользователь jenkins. Так что запуск команд от имени пользователя jenkins работал просто отлично.

Джефф Хатчинс
источник
1

Пытаться

ssh-keygen -R имя хоста

-R hostname Удаляет все ключи, принадлежащие имени хоста, из файла known_hosts. Эта опция полезна для удаления хэшированных хостов

Асвати Унни
источник