Die Überprüfung des Jenkins-Hostschlüssels ist fehlgeschlagen

164

Ich habe ein Problem mit Jenkins . Wenn Sie "git" einstellen, wird der folgende Fehler angezeigt:

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

Ich habe mit ssh getestet :

[email protected]:person/projectmarket.git

Dies ist ein Fehler:

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

Ich habe diese Schritte auch mit "SSH-Schlüssel" ausgeführt.

Loggen Sie sich unter Jenkins ein

sudo su jenkins

Kopieren Sie Ihren Github-Schlüssel in den Ordner Jenkins .ssh

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

Benennen Sie die Schlüssel um

mv id_rsa_github id_rsa
mv id_rsa_github.pub id_rsa.pub

aber immer noch nicht funktionierendes Git- Repository in Jenkins .

danke durch hilfe!.

AM Mérida
quelle
Kein Jenkins-Benutzer vorhanden
IceFire

Antworten:

183

Wechseln Sie zum jenkinsBenutzer und führen Sie den Befehl manuell aus:

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

Sie erhalten die Standard-SSH-Warnung, wenn Sie zum ersten Mal über SSH eine Verbindung zu einem neuen Host herstellen:

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

Geben Sie yesund drücken Sie die Eingabetaste. Der Hostschlüssel für bitbucket.orgwird nun zur ~/.ssh/known_hostsDatei hinzugefügt und Sie erhalten diesen Fehler in Jenkins nicht mehr.

ctc
quelle
6
Zeigen Sie dies: Berechtigung verweigert (publickey). tödlich: Das entfernte Ende legte unerwartet auf
AM Mérida
6
Richtig, aber das ist ein ganz anderer Fehler. Jetzt müssen Sie Ihren öffentlichen Schlüssel zum Repository unter bitbucket.org hinzufügen.
CTC
2
+1 für "worksforme" hatte genau das gleiche Problem. Erstellt id_rsa für den richtigen Benutzer, geändert zu Jenkins, fügte den öffentlichen Schlüssel hinzu, funktionierte immer noch nicht. Der Versuch, git als sudo -u jenkins zu versuchen, ergab die Datei knonwn_hosts, wodurch das Problem behoben wurde.
Sibidiba
3
Sie müssen es als Benutzer ausführen, der Jenkins ausführt. Auf den meisten Systemen wird es normalerweise als separater Benutzer ausgeführt (z. B. als "Jenkins" -Benutzer). Daher müssten Sie zu diesem Benutzer wechseln, um sicherzustellen, dass die Adresse für bitbucket.org zu ~ / .ssh / unknown_hosts hinzugefügt wird.
CTC
43

Jenkins ist ein Dienstkonto, es hat keine Shell. Es ist allgemein anerkannt, dass Dienstkonten. sollte sich nicht interaktiv anmelden können.

Führen Sie die folgenden Schritte aus, um "Überprüfung des Jenkins-Hostschlüssels fehlgeschlagen" zu beheben. Ich habe Quecksilber mit Jenkins verwendet.

1) Führen Sie die folgenden Befehle auf dem Terminal aus

             $ sudo su -s /bin/bash jenkins

Passwort eingeben

2) Generieren Sie einen öffentlichen privaten Schlüssel mit dem folgenden Befehl:

              ssh-keygen

Sie können die Ausgabe als :: sehen

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) Drücken Sie die Eingabetaste -> Geben Sie keine Passphrase ein -> drücken Sie die Eingabetaste

             Key has been generated

4) Gehen Sie zu -> cat /var/lib/jenkins/.ssh/id_rsa.pub

5) Kopieren Sie den Schlüssel aus id_rsa.pub

6) Beenden Sie die Bash

7) ssh@yourrepository

8) vi .ssh/authorized_keys

9) Fügen Sie den Schlüssel ein

10) verlassen

11) Melden Sie sich manuell beim Mercurial Server an

Hinweis: Bitte melden Sie sich manuell an, andernfalls geben Jenkins erneut den Fehler "Hostüberprüfung fehlgeschlagen" aus.

12) Einmal manuell erledigt, gehe jetzt zu Jenkins und gib Build

Genießen!!!

Viel Glück

Feroz Ahmed Ansari
quelle
Welches Passwort wird hier angefordert?
IceFire
26

Oder Sie können verwenden:

ssh -oStrictHostKeyChecking=no host

Dies ist unsicher (Mann in der Mitte greift an), aber die einfachste Lösung.

Der bessere Weg, dies zu tun, besteht darin, korrekte Zuordnungen zwischen Host und IP-Adresse zu generieren. Sie sshwerden sich also nicht beschweren:

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

Auszug aus dem Kern .

FelikZ
quelle
3
Dies eröffnet Ihnen potenzielle MITM-Angriffe.
CTC
1
Sie können -oStrictHostKeyChecking = no hinzufügen und einmal eine Verbindung herstellen, wodurch der Host zur Datei unknown_hosts hinzugefügt wird (wie wenn Sie in der Befehlszeile ssh eingeben und yes eingeben, um den Schlüssel zur Datei unknown_hosts hinzuzufügen) und diese Option anschließend entfernen.
Krupan
6

Hatte das gleiche Problem, ich behebe es so:

Berechtigung für id_rsa * zurücksetzen nur für aktuellen Benutzer keine Gruppe keine andere

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

Und lösche ~ / .ssh / know_hosts

Jetzt als Jenkins verbinden

sudo su jenkins

Probieren Sie die Jenkins-Befehle aus

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

Wenn kein Problem auftritt, können Jenkins jetzt das Repo verbinden (zumindest für mich ^^)

Loodub
quelle
1
Der obige Befehl (chmod G-rwx ~ / .ssh / id *) zum Ändern der Gruppenberechtigung ist fehlgeschlagen. Das Folgende funktionierte wie gewünscht. chmod g-rwx ~ / .ssh / id *
samaitra
3
  • Stellen Sie sicher, dass wir keine der Standardeigenschaften von sshd_config bearbeiten, um den Fehler zu überspringen

  • Hostüberprüfung fehlgeschlagen - Definitiv ein fehlender Eintrag des Hostnamens in der known_hostsDatei

  • Melden Sie sich bei dem Server an, auf dem der Prozess fehlschlägt, und gehen Sie wie folgt vor:

    1. Sudo an den Benutzer, der den Prozess ausführt

    2. ssh-copy-id destinationuser@destinationhostname

    3. Es wird zum ersten Mal so gefragt, sagen Sie ja und es wird auch zum ersten Mal nach dem Passwort gefragt:

      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*
      

      Passwortabfrage? Passwort geben

    4. Führen Sie dies jetzt auf dem Server aus, auf dem der Prozess ausgeführt wird ssh destinationuser@destinationhostname. Es sollte sich ohne Passwort anmelden.

      Hinweis: Ändern Sie nicht die Standardberechtigungen von Dateien im .ssh- Verzeichnis des Benutzers, da sonst unterschiedliche Probleme auftreten

GANESH
quelle
In Schritt 3 kann es vorkommen, dass Sie aufgefordert werden, den Schlüssel bereits in der Datei zu verwenden. Sie sollten diese 4 Schritte jedoch fortsetzen. Wenn Sie sich ohne Kennwort vom Benutzer von Jenkins anmelden können, sind Sie fertig.
Rakibul Haq
3

Definieren Sie für die Problemumgehung (z. B. Windows-Slave) die folgende Umgebungsvariable in globalen Eigenschaften:

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

Jenkins, Globale Eigenschaften, Umgebungsvariablen, GIT_SSH_COMMAND

Hinweis: Wenn Sie die Option nicht sehen, benötigen Sie wahrscheinlich das EnvInject- Plugin .

Kenorb
quelle
3

Kopieren Sie Hostschlüssel von Bitbucket und 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.
quelle
2

Am besten verwenden Sie einfach Ihre "Git-URL" im URL-Format "https" in der Jenkins-Datei oder wo immer Sie möchten.

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

Nitin
quelle
2

SSH

Wenn Sie es mit SSH versuchen, kann der Fehler bei der Überprüfung des Hostschlüssels mehrere Gründe haben. Befolgen Sie diese Schritte, um alle Gründe zu überwinden.

  1. Legen Sie die Umgebungsvariable als HOME fest und geben Sie die Adresse als Stammverzeichnis des .ssh- Ordners an. Beispiel: - Wenn sich Ihre .ssh im Ordner Name befindet . C: / Benutzer / Name.
  2. Stellen Sie nun sicher, dass der öffentliche SSH-Schlüssel auch im Repository-Link bereitgestellt wird. Entweder ist es Github oder Bitbucket oder irgendein anderes.
  3. Öffnen Sie Git Bash. Versuchen Sie, das Projekt aus dem Repository zu klonen. Dies hilft beim Hinzufügen Ihrer Repository-URL zur Datei "unknown_host", die automatisch im Ordner ".ssh" erstellt wird.
  4. Öffnen Sie jetzt Jenkins und erstellen Sie einen neuen Job. Klicken Sie dann auf Konfigurieren.
  5. Geben Sie die Klon-URL in der Quellcodeverwaltung unter Git an. Die URL sollte mit [email protected] / ......... oder ssh: // proje ........ beginnen.
  6. Unter Anmeldeinformationen müssen Sie den Benutzernamen und das Kennwort Ihres Repository-Formulars hinzufügen, mit dem Sie das Projekt klonen. Wählen Sie diesen Berechtigungsnachweis aus.
  7. Und jetzt die Konfiguration anwenden und speichern.
  8. Bingo! Beginnen Sie mit dem Aufbau des Projekts. Ich hoffe, dass Sie jetzt keinen Fehler bei der Überprüfung des Hostschlüssels erhalten!
Prem Choudhary
quelle
2
  1. Melden Sie sich als Jenkins an mit: "sudo su -s / bin / bash jenkins"
  2. git klone das gewünschte Repo, was den Schlüsselfehler verursacht
  3. Sie werden aufgefordert, den Schlüssel hinzuzufügen, indem Ja / Nein angezeigt wird (geben Sie Ja oder Y ein).

das ist es!

Sie können jetzt den Jenkins-Job erneut ausführen.

Ich hoffe, dies wird Ihr Problem beheben.

Timothy Asir
quelle
2

Ich bin auf dieses Problem gestoßen und es stellte sich heraus, dass das Problem darin bestand, dass der Jenkins-Dienst nicht als Jenkins-Benutzer ausgeführt wurde. Das Ausführen der Befehle als Benutzer von Jenkins funktionierte also einwandfrei.

Jeff Hutchins
quelle
1

Versuchen

ssh-keygen -R Hostname

-R Hostname Entfernt alle zum Hostnamen gehörenden Schlüssel aus einer Datei "unknown_hosts". Diese Option ist nützlich, um Hash-Hosts zu löschen

Aswathy Unni
quelle