Weryfikacja klucza hosta Jenkins nie powiodła się

164

Mam problem z jenkinsem , ustawienie "git" pokazuje następujący błąd:

Failed to connect to repository : Command "git ls-remote -h https://[email protected]/person/projectmarket.git HEAD" returned status code 128:
stdout:
stderr: fatal: Authentication failed

Testowałem z ssh :

[email protected]:person/projectmarket.git

To jest błąd:

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

Te kroki również wykonałem z „kluczem SSH”.

Zaloguj się pod Jenkins

sudo su jenkins

Skopiuj swój klucz github do folderu Jenkins .ssh

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

Zmień nazwy kluczy

mv id_rsa_github id_rsa
mv id_rsa_github.pub id_rsa.pub

ale nadal nie działa repozytorium git w jenkins .

dzięki za pomoc !.

AM Mérida
źródło

Odpowiedzi:

183

Zmień na jenkinsużytkownika i uruchom polecenie ręcznie:

git ls-remote -h [email protected]:person/projectmarket.git HEAD

Otrzymasz standardowe ostrzeżenie SSH podczas pierwszego łączenia się z nowym hostem przez 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)?

Wpisz yesi naciśnij Enter. Klucz hosta dla bitbucket.orgzostanie teraz dodany do ~/.ssh/known_hostspliku i nie będziesz już otrzymywać tego błędu w Jenkins.

ctc
źródło
6
pokaż to: Odmowa dostępu (publickey). fatalny: zdalny koniec rozłączył się nieoczekiwanie
AM Mérida
6
Racja, ale to zupełnie inny błąd. Teraz musisz dodać swój klucz publiczny do repozytorium na stronie bitbucket.org.
ctc
2
+1 dla „workforme” miał dokładnie ten sam problem. Utworzono id_rsa dla odpowiedniego użytkownika, chmod-ed do jenkins, dodano klucz publiczny, nadal nie działa. Próba gita jako sudo -u jenkins dała plik knonwn_hosts, naprawiając problem.
sibidiba
3
Musisz go uruchomić jako użytkownik korzystający z Jenkinsa. W większości systemów zazwyczaj uruchamia się go jako oddzielny użytkownik (np. Użytkownik „jenkins”). W związku z tym musisz przełączyć się na tego użytkownika, aby upewnić się, że adres bitbucket.org zostanie dodany do ~ / .ssh / known_hosts.
ctc
43

Jenkins jest kontem usługi, nie ma powłoki zgodnie z projektem. Powszechnie przyjmuje się, że usługi kont. nie powinien mieć możliwości interaktywnego logowania.

Aby rozwiązać problem „Weryfikacja klucza hosta Jenkins nie powiodła się”, wykonaj następujące czynności. Użyłem Mercurial z Jenkinsem.

1) Wykonaj następujące polecenia na terminalu

             $ sudo su -s /bin/bash jenkins

podaj hasło

2) Wygeneruj publiczny klucz prywatny za pomocą następującego polecenia:

              ssh-keygen

możesz zobaczyć dane wyjściowe jako:

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) Naciśnij Enter -> Nie podawaj hasła -> naciśnij Enter

             Key has been generated

4) przejdź do -> cat /var/lib/jenkins/.ssh/id_rsa.pub

5) Skopiuj klucz z id_rsa.pub

6) Wyjdź z bash

7) ssh@yourrepository

8) vi .ssh/authorized_keys

9) Wklej klucz

10) wyjście

11) Zaloguj się ręcznie do serwera Mercurial

Uwaga: Pls logują się ręcznie, w przeciwnym razie jenkins ponownie wyświetli błąd „weryfikacja hosta nie powiodła się”

12) Po wykonaniu ręcznym przejdź do Jenkinsa i podaj kompilację

Cieszyć się!!!

Powodzenia

Feroz Ahmed Ansari
źródło
JAKIE hasło jest tutaj wymagane?
IceFire
26

Lub możesz użyć:

ssh -oStrictHostKeyChecking=no host

Będzie to niebezpieczne (atakuje człowiek pośrodku), ale najłatwiejsze rozwiązanie.

Lepszym sposobem na to jest wygenerowanie poprawnych mapowań między hostem a adresem IP, więc sshnie będzie narzekać:

#!/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

Fragment z sedna .

FelikZ
źródło
3
To otwiera cię na potencjalne ataki MITM.
ctc
1
Możesz dodać -oStrictHostKeyChecking = no i połączyć się raz, co spowoduje dodanie hosta do pliku known_hosts (tak samo jak w przypadku ssh w wierszu poleceń i wpisaniu tak, aby dodać klucz do pliku known_hosts), a następnie usunąć tę opcję.
krupan
6

Miałem ten sam problem, naprawiłem to w ten sposób:

reset uprawnienia na id_rsa * tylko dla bieżącego użytkownika brak grupy żaden inny

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

I wyczyść ~ / .ssh / know_hosts

Teraz połącz się jako Jenkins

sudo su jenkins

Wypróbuj polecenia Jenkinsa

git ls-remote -h [email protected]:user/project.git HEAD

Jeśli nie pojawi się żaden problem, teraz Jenkins będzie mógł podłączyć repozytorium (przynajmniej dla mnie ^^)

Loodub
źródło
1
Powyższe polecenie (chmod G-rwx ~ / .ssh / id *) służące do zmiany uprawnień grupy nie powiodło się. Poniższe działały zgodnie z życzeniem. chmod g-rwx ~ / .ssh / id *
samaitra
3
  • Upewnij się, że nie edytujemy żadnych domyślnych właściwości sshd_config, aby pominąć błąd

  • Weryfikacja hosta nie powiodła się - zdecydowanie brak wpisu nazwy hosta w known_hostspliku

  • Zaloguj się do serwera, na którym proces się nie udaje i wykonaj następujące czynności:

    1. Sudo do użytkownika uruchamiającego proces

    2. ssh-copy-id destinationuser@destinationhostname

    3. Po raz pierwszy zapyta się w ten sposób, powie tak, a także zapyta o hasło po raz pierwszy:

      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*
      

      Pytanie o hasło? podaj hasło

    4. Teraz z serwera, na którym działa proces, zrób ssh destinationuser@destinationhostname. Powinien zalogować się bez hasła.

      Uwaga: nie zmieniaj domyślnych uprawnień do plików w katalogu .ssh użytkownika , skończysz z różnymi problemami

GANESH
źródło
w kroku 3 może się zdarzyć, że pojawi się monit o podanie klucza już istniejącego w pliku, ale powinieneś kontynuować te 4 kroki i jeśli możesz zalogować się bez hasła od użytkownika jenkins, to wszystko jest ustawione.
Rakibul Haq
3

Jeśli chodzi o obejście (np. Windows slave), zdefiniuj następującą zmienną środowiskową we właściwościach globalnych:

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

Jenkins, właściwości globalne, zmienne środowiskowe, GIT_SSH_COMMAND

Uwaga: jeśli nie widzisz tej opcji, prawdopodobnie potrzebujesz do niej wtyczki EnvInject .

kenorb
źródło
3

Skopiuj klucze hosta z bitbucket i 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'
Marco M
źródło
2

Najlepszym sposobem jest użycie adresu URL „git url” w formacie adresu URL „https” w pliku Jenkinsfile lub w dowolnym innym miejscu.

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

Nitin
źródło
2

SSH

Jeśli próbujesz to zrobić z SSH, błąd weryfikacji klucza hosta może wystąpić z kilku powodów. Wykonaj te kroki, aby przezwyciężyć wszystkie przyczyny.

  1. Ustaw zmienną środowiskową na HOME i podaj adres jako katalog główny folderu .ssh . np .: - Jeśli plik .ssh jest przechowywany w folderze Name . C: / Users / Name.
  2. Teraz upewnij się, że publiczny klucz SSH jest również dostarczany w linku do repozytorium. Albo jest to github, bitbucket, albo jakikolwiek inny.
  3. Otwórz git bash. I spróbuj sklonować projekt z repozytorium. Pomoże to w dodaniu adresu URL repozytorium do pliku known_host, który jest automatycznie tworzony w folderze .ssh.
  4. Teraz otwórz jenkins i utwórz nową pracę. Następnie kliknij Konfiguruj.
  5. podaj adres URL do klonowania w zarządzaniu kodem źródłowym w Git. Adres URL powinien zaczynać się od [email protected] / ......... lub ssh: // proje ........
  6. W Poświadczeniach musisz dodać nazwę użytkownika i hasło do formularza repozytorium, które klonujesz projekt. Wybierz to poświadczenie.
  7. A teraz zastosuj i zapisz konfigurację.
  8. Bingo! Zacznij budować projekt. Mam nadzieję, że teraz nie otrzymasz żadnego błędu weryfikacji klucza hosta!
Prem Choudhary
źródło
2
  1. zaloguj się jako jenkins używając: "sudo su -s / bin / bash jenkins"
  2. git clone żądane repozytorium, które powoduje błąd klucza
  3. poprosi Cię o dodanie klucza, pokazując Tak / Nie (wpisz tak lub y)

Otóż ​​to!

możesz teraz ponownie uruchomić zadanie Jenkinsa.

Mam nadzieję, że to rozwiąże Twój problem.

Timothy Asir
źródło
2

Natknąłem się na ten problem i okazało się, że problem polegał na tym, że usługa Jenkins nie była uruchomiona jako użytkownik jenkins. Więc uruchamianie poleceń jako użytkownik jenkins działało dobrze.

Jeff Hutchins
źródło
1

Próbować

ssh-keygen -R nazwa hosta

-R nazwa_hosta Usuwa wszystkie klucze należące do nazwy hosta z pliku znane_hosty. Ta opcja jest przydatna do usuwania zahaszowanych hostów

Aswathy Unni
źródło