Permission refusée (clé publique) pendant le fetch de GitHub avec un utilisateur de Jenkins sur Ubuntu
voici ma configuration:
- Jenkins est en cours d'exécution sur ma machine linux en tant qu'utilisateur de "jenkins".
- j'ai généré une paire de clés ssh comme décrit dans Linux-Setup Git , pour l'utilisateur 'jenkins'.
- quand je
sudo su jenkins
et essayessh -vT git@github.com
, on me demande toujours ma phrase de passe, mais je suis toujours finalement authentique. (l'option verbose montre quelle clé est utilisée, entre autres). - je pourrais cloner ma pension de GitHub en utilisant jenkins:
Ainsi:
jenkins@alpm:~/jobs/test git/workspace$ git pull
Enter passphrase for key '/var/lib/jenkins/.ssh/id*_rsa':
Already up-to-date.
Jusqu'à présent, j'ai suivi les instructions à la lettre. Le problème est que le travail de Jenkins échoue avec l'erreur suivante:
status code 128:
stdout:
stderr: Permission denied (publickey).
fatal: The remote end hung up unexpectedly
c'est la même erreur que j'obtiens quand je tape la phrase-clé (mais bien sûr, Jenkins ne me demande pas la phrase-clé). Les pages suivantes:
- Github-SSH Issues
- utilisation de L'agent ssh Forwarding
indique à moi que ssh-agent pourrait aider à se souvenir de la phrase de passe, ce qu'il fait quand j'utilise mon propre utilisateur, mais pas le jenkins id. Notez que pendant l'exécution comme mon utilisateur normal yields:
echo "$SSH_AUTH_SOCK"
/tmp/keyring-nQlwf9/ssh
tout en exécutant la même commande que mon 'jenkins' ne donne rien (pas même permission refusée)
ma compréhension du problème est que la phrase de passe n'est pas rappelé. Avez-vous une idée? Dois-je lancer un ssh-agent ou un key ring manager pour l'utilisateur jenkins? Comment? Ou est-ce que SSH forwarding convient pour le transfert vers la même machine? Toute brillante idée?
ps: je n'ai jamais sudo gitted
, j'ai toujours utilisé jenkins ou mon compte d'utilisateur (comme mentionné dans ce SO post - Ubuntu / GitHub SSH Question Clé )
8 réponses
puisque personne n'a écrit la réponse à partir des commentaires pendant plusieurs mois, je vais rapidement le faire.
il y a 2 problèmes/solutions possibles:
-
id_rsa créé avec d'utilisateur incorrect
Créer id_rsa comme le jenkins utilisateur (voir hudson ne peut pas extraire de dépôt git )
-
Laisser passphrase vide
j'ai contourné ce problème en laissant la phrase vide lors de la création des clés.
pour résumer ce qui doit être fait sur le serveur Jenkins:
# 1. Create the folder containing the SSH keys if necessary
if [ ! -e ~jenkins/.ssh ]; then mkdir ~jenkins/.ssh; fi
cd ~jenkins/.ssh/
# 2. Create the SSH pair of keys
# The comment will help to identify the SSH key on target systems
ssh-keygen -C "jenkins" -f ~jenkins/.ssh/id_rsa -P ""
# 3. Assign the proper access rights
chown -R jenkins ~jenkins/.ssh/
chmod 700 ~jenkins/.ssh
chmod 600 ~jenkins/.ssh/*
Rappelez-vous:
- veuillez conserver le nom par défaut "id_rsa" lors de la génération des clés, car d'autres comme "id_rsa_jenkins" ne fonctionneront pas, même si elles sont correctement configurées.
- N'utilisez pas de phrase de passe pour votre clé
- Vérifier que la clé publique (id_rsa.pub) a été téléchargé sur le serveur git (github, Bitbucket, etc.). Une fois cela fait, testez votre clé SSH en exécutant:
ssh -vvv git@github.com
(changez l'adresse selon votre serveur git)
j'ajouterais que si vous avez créé les clés à la main, elles pourraient encore être la propriété de vous et non lisible par jenkins, essayez:
sudo chown jenkins -R /var/lib/jenkins/.ssh/*
à vérifier sont les suivants:
- si la bonne clé publique (id_rsa.pub) est téléchargé sur le git-server.
- l'utilisateur jenkins accédera à GitHub- > pour vérifier si la clé privée de droite (id_rsa) est copiée dans /var/lib/jenkins/.ssh /
- si le fichier known_hosts est créé dans ~/.dossier ssh. Essayez ssh-vvv git@github.com pour voir les logs de débogage. Si la chose va bien, github.com sera ajouté à known_hosts.
- si la permission de id_rsa est fixée à 755 (chmod 755 id_rsa)
après tous les contrôles - > try ssh-vvv git@github.com N'essayez pas de faire la configuration dans jenkins jusqu'à ce que ssh fonctionne!
si vous exécutez jenkins comme un service sous windows, vous devez vérifier l'utilisateur exécutant le service . Si vous avez créé les clés en utilisant l'utilisateur "MACHINENAME\user", changer le service de sorte que l'utilisateur l'exécutant peut correspondre
pour les utilisateurs Mac, le problème peut être résolu en supprimant les clés existantes et en créant de nouvelles clés privées et publiques en suivant ces étapes:
1.Supprimer toutes les clés publiques et privées situées à /Utilisateurs/Nom D'utilisateur/.ssh
2.Supprimer tous les justificatifs d'identité enregistrés sous l'onglet " Credentials dans Jenkins.
3.Supprimer l'actuel Public SSH les clés définies dans les paramètres du dépôt GitHub .
4.Créer de nouvelles clés SSH (privées et publiques: id_rsa et id_rsa.pub) en suivant les étapes de https://confluence.atlassian.com/bitbucketserver/creating-ssh-keys-776639788.html#CreatingSSHkeys-CreatinganSSHkeyonLinux&MacOSX
5.Définissez la nouvelle clé publique SSH (id_rsa.pub) dans Github ou un paramètres de dépôt équivalents.
6.Dans Jenkins, crée de nouveaux credentials en ajoutant la clé privée SSH(id_rsa) pour votre nom d'utilisateur Github.
7.L'erreur doit être supprimée maintenant.
doivent être générées par l'utilisateur jenkins.
sudo su jenkins
ssh-keygen
une fois que la clé est générée, elle doit être ajoutée en tant que clé SSH dans bitbucket ou github.