La vérification de la clé de l'hôte Jenkins a échoué


164

J'ai un problème avec jenkins , la configuration de "git" montre l'erreur suivante:

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

J'ai testé avec ssh :

git@bitbucket.org:person/projectmarket.git

C'est une erreur:

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

J'ai également fait ces étapes avec "clé SSH".

Connectez-vous sous Jenkins

sudo su jenkins

Copiez votre clé github dans le dossier Jenkins .ssh

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

Renommez les clés

mv id_rsa_github id_rsa
mv id_rsa_github.pub id_rsa.pub

mais toujours pas de dépôt git dans jenkins .

merci à l'aide !.



aucun utilisateur jenkins existant
IceFire

Réponses:


183

Changez pour l' jenkinsutilisateur et exécutez la commande manuellement:

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

Vous recevrez l'avertissement SSH standard lors de la première connexion à un nouvel hôte via 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)?

Tapez yeset appuyez sur Entrée. La clé d'hôte pour bitbucket.orgsera maintenant ajoutée au ~/.ssh/known_hostsfichier et vous n'obtiendrez plus cette erreur dans Jenkins.


6
montrer ceci: Autorisation refusée (publickey). fatal: La télécommande a raccroché de manière inattendue
AM Mérida

6
C'est vrai, mais c'est une erreur entièrement différente. Vous devez maintenant ajouter votre clé publique au référentiel sur bitbucket.org.
ctc


2
+1 pour "worksforme", avait exactement le même problème. Créé id_rsa pour l'utilisateur approprié, chmod-ed à jenkins, ajouté la clé publique, ne fonctionnait toujours pas. Essayer git comme sudo -u jenkins a donné le fichier knonwn_hosts, corrigeant le problème.
sibidiba

3
Vous devez l'exécuter en tant qu'utilisateur qui exécute Jenkins. Sur la plupart des systèmes, on l'exécute généralement en tant qu'utilisateur séparé (par exemple un utilisateur «jenkins»). Par conséquent, vous devez basculer vers cet utilisateur pour vous assurer que l'adresse de bitbucket.org est ajoutée à ~ / .ssh / known_hosts.
ctc

43

Jenkins est un compte de service, il n'a pas de shell par conception. Il est généralement admis que les comptes de service. ne devrait pas pouvoir se connecter de manière interactive.

Pour résoudre «Échec de la vérification de la clé de l'hôte Jenkins», procédez comme suit. J'ai utilisé mercurial avec jenkins.

1) Exécutez les commandes suivantes sur le terminal

             $ sudo su -s /bin/bash jenkins

fournir un mot de passe

2) Générez une clé privée publique à l'aide de la commande suivante:

              ssh-keygen

vous pouvez voir la sortie comme:

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) Appuyez sur Entrée -> Ne donnez aucune phrase de passe -> appuyez sur Entrée

             Key has been generated

4) allez dans -> cat /var/lib/jenkins/.ssh/id_rsa.pub

5) Copiez la clé de id_rsa.pub

6) Sortie de bash

7) ssh@yourrepository

8) vi .ssh/authorized_keys

9) Collez la clé

10) sortie

11) Connectez-vous manuellement au serveur mercurial

Remarque: veuillez vous connecter manuellement, sinon jenkins donnera à nouveau l'erreur "vérification de l'hôte a échoué"

12) une fois fait manuellement, allez maintenant à Jenkins et donnez la construction

Prendre plaisir!!!

Bonne chance


QUEL mot de passe est demandé ici?
IceFire

26

Ou vous pouvez utiliser:

ssh -oStrictHostKeyChecking=no host

Ce ne sera pas sûr (l'homme au milieu attaque) mais la solution la plus simple.

La meilleure façon de le faire est de générer des mappages corrects entre l'hôte et l'adresse IP, donc sshne vous plaindrez pas:

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

Extrait de l' essentiel .


3
Cela vous ouvre à des attaques MITM potentielles.
ctc

1
Vous pouvez ajouter -oStrictHostKeyChecking = no et vous connecter une fois, ce qui ajoutera l'hôte au fichier known_hosts (comme lorsque vous ssh sur la ligne de commande et tapez yes pour ajouter la clé au fichier known_hosts), puis supprimez cette option après cela.
krupan le

6

J'ai eu le même problème, je le corrige comme ça:

réinitialiser l'autorisation sur id_rsa * uniquement pour l'utilisateur actuel aucun groupe aucun autre

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

Et effacez ~ / .ssh / know_hosts

Maintenant, connectez-vous en tant que jenkins

sudo su jenkins

Essayez les commandes jenkins

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

Si aucun problème n'apparaît, jenkins pourra maintenant connecter le dépôt (pour moi ^^ au moins)


1
La commande ci-dessus (chmod G-rwx ~ / .ssh / id *) pour modifier l'autorisation de groupe a échoué. Le ci-dessous a fonctionné comme souhaité. chmod g-rwx ~ / .ssh / id *
samaitra


3
  • Assurez-vous que nous ne modifions aucune des propriétés par défaut de sshd_config pour ignorer l'erreur

  • La vérification de l'hôte a échoué - Il manque certainement une entrée de nom d'hôte dans le known_hostsfichier

  • Connectez-vous au serveur sur lequel le processus échoue et procédez comme suit:

    1. Sudo à l'utilisateur exécutant le processus

    2. ssh-copy-id destinationuser@destinationhostname

    3. Il invitera comme ceci pour la première fois, dites oui et il demandera également le mot de passe pour la première fois:

      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*
      

      Invite de mot de passe? donner le mot de passe

    4. Maintenant, depuis le serveur sur lequel le processus est en cours d'exécution, faites ssh destinationuser@destinationhostname. Il devrait se connecter sans mot de passe.

      Remarque: ne modifiez pas les autorisations par défaut des fichiers dans le répertoire .ssh de l'utilisateur , vous vous retrouverez avec différents problèmes


à l'étape 3, il se peut que vous soyez invité à indiquer que la clé existe déjà dans le fichier, mais vous devez continuer ces 4 étapes et si vous pouvez vous connecter sans mot de passe de l'utilisateur jenkins, vous êtes tous définis.
Rakibul Haq

3

En ce qui concerne la solution de contournement (par exemple esclave Windows), définissez la variable d'environnement suivante dans les propriétés globales:

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

Jenkins, propriétés globales, variables d'environnement, GIT_SSH_COMMAND

Remarque: si vous ne voyez pas l'option, vous avez probablement besoin du plugin EnvInject pour cela.


3

Copiez les clés d'hôte de bitbucket et de 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

La meilleure façon vous pouvez simplement utiliser votre "git url" au format d'URL 'https "dans le fichier Jenkins ou où vous voulez.

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


2

SSH

Si vous essayez avec SSH, l' erreur de vérification de la clé d'hôte peut provenir de plusieurs raisons.Suivez ces étapes pour surmonter toutes les raisons.

  1. Définissez la variable d'environnement sur HOME et indiquez l'adresse comme répertoire racine du dossier .ssh . par exemple: - Si votre .ssh est conservé dans le dossier Nom . C: / Utilisateurs / Nom.
  2. Assurez-vous maintenant que la clé SSH publique est également fournie dans le lien du référentiel. Soit c'est github ou bitbucket ou tout autre.
  3. Ouvrez git bash. Et essayez de cloner le projet à partir du référentiel. Cela vous aidera à ajouter l'URL de votre référentiel dans le fichier known_host, qui est créé automatiquement dans le dossier .ssh.
  4. Maintenant, ouvrez jenkins et créez un nouvel emploi. Cliquez ensuite sur configurer.
  5. fournissez l'URL de clonage dans la gestion du code source sous Git. L'URL doit commencer par git@github.com / ......... ou ssh: // proje ........
  6. Sous les informations d'identification, vous devez ajouter le nom d'utilisateur et le mot de passe de votre formulaire de référentiel dans lequel vous clonez le projet. Sélectionnez cette information d'identification.
  7. Et maintenant, appliquez et enregistrez la configuration.
  8. Bingo! Commencez à créer le projet. J'espère maintenant que vous n'obtiendrez aucune erreur de vérification de la clé d'hôte!

2
  1. connectez-vous en tant que jenkins en utilisant: "sudo su -s / bin / bash jenkins"
  2. git clone le dépôt souhaité qui provoque l'erreur de clé
  3. il vous demandera d'ajouter la clé en indiquant Oui / Non (entrez oui ou y)

c'est tout!

vous pouvez maintenant réexécuter le travail jenkins.

J'espère que cela résoudra votre problème.


2

J'ai rencontré ce problème et il s'est avéré que le problème était que le service jenkins n'était pas exécuté en tant qu'utilisateur jenkins. Donc, exécuter les commandes en tant qu'utilisateur jenkins fonctionnait très bien.


1

Essayer

ssh-keygen -R nom d'hôte

-R hostname Supprime toutes les clés appartenant à hostname d'un fichier known_hosts. Cette option est utile pour supprimer les hôtes hachés

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.