web-dev-qa-db-fra.com

Jenkins plug-in avec accès ssh à bitbucket: autorisation refusée (publickey). fatal: impossible de lire à partir du référentiel distant

Je ne parviens pas à faire authentifier le plug-in Jenkins git avec un dépôt privé git sur bitbucket.org. J'ai généré une paire de clés privée/publique à l'aide de ssh-keygen et défini la clé publique dans mon compte bitbucket sous la page de compte de clés ssh.

Dans la page de configuration du travail, j'ai défini la section Gestion du code source comme suit:

Repository URL: [email protected]:mproject.git (the SSH url for clone)
Credentials: The private key id_rsa generated by ssh-keygen (no passphrase) and user git.

Il donne immédiatement l'erreur suivante:

Failed to connect to repository : Command "git -c core.askpass=true ls-remote -h [email protected]:myproject.git HEAD" returned status code 128:
stdout: 
stderr: Permission denied (publickey). 
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

Lorsque je fais la même commande git à partir de la ligne de commande dans le répertoire d'espace de travail dans un shell, cela fonctionne correctement. J'ai mon ~/.bashrc spécifié dans Build Environment/Properties File Path donc je suis confus ce qui pourrait être différent quand il s'exécute dans le travail jenkins.

Je n'ai que deux utilisateurs sur ma machine jenkins (jenkins et root) et j'exécutais la commande git en tant qu'utilisateur jenkins. Le répertoire personnel de l'utilisateur Jenkins est/home/Jenkins. Mon travail Jenkins s'exécute en tant qu'utilisateur anonyme. Cela pourrait-il être le problème?

J'ai les fichiers .ssh suivants:

-rw-r--r--. 1 jenkins jenkins   89 Apr 25 11:18 config
-rw-r--r--. 1 jenkins jenkins  137 Apr 24 13:56 environment
-rw-------. 1 jenkins jenkins 1766 Apr 24 13:54 id_rsa
-rw-r--r--. 1 jenkins jenkins  425 Apr 24 13:54 id_rsa.pub
-rw-r--r--. 1 jenkins jenkins  806 Apr 25 12:06 known_hosts
drwx------. 2 jenkins jenkins 85 Apr 25 12:05 .ssh
11
Farrukh Najmi

Je suppose que vous avez ajouté des clés ssh à votre utilisateur, pas à l'utilisateur jenkins.

Par défaut, Jenkins est exécuté par l'utilisateur Jenkins. Le répertoire de base est (par défaut) /var/lib/jenkins. Pour vérifier mon hypothèse, veuillez vous connecter en tant qu'utilisateur de jenkins: 

su jenkins

et appelez:

git -c core.askpass=true ls-remote -h [email protected]:myproject.git HEAD

pour vérifier si cela va retourner une erreur. 

Vous devriez avoir le répertoire /var/lib/jenkins/.ssh qui contient les clés ssh appropriées. Vous devrez ajouter id_rsa.pub à partir de ce répertoire à votre compte sur bitbucket. 

Suivant dans la configuration du travail vient de définir:

Repository URL: [email protected]:ntti3/gtip.git
Credentials: - none - 

La configuration décrite fonctionne pour mon Jenkins avec bitbucket.

Assurez-vous également que le répertoire .ssh a défini les droits d'accès appropriés. Ssh n'aime pas les répertoires "trop ​​ouverts":

-rw-------  1 jenkins jenkins  407 Apr 14 14:14 authorized_keys
-rw-------  1 jenkins jenkins 1676 Nov 25 16:37 id_rsa
-rw-rw-r--  1 jenkins jenkins  400 Nov 25 16:38 id_rsa.pub
-rw-r--r--  1 jenkins jenkins 3096 Feb 11 12:11 known_hosts
drwx------   2 jenkins jenkins     4096 Apr 14 14:14 .ssh
15
kkamilpl

Dans mon cas, le problème tenait à avoir déjà créé un utilisateur jenkins avec le répertoire personnel/home/jenkins, puis à installer root en tant que root. Cela peut avoir créé une certaine confusion entre le fait que le répertoire personnel soit/var/lib/jenkins (comme d’habitude) et/home/jenkins. Le correctif était de:

  1. userdel jenkins # Supprimer l'utilisateur jenkins
  2. rm -rf/home/jenkins; rm -rf/var/lib/jenkins #Remove old jenkins dirs
  3. Installez à nouveau Jenkins en tant que processus normal qui crée un utilisateur jenkins
  4. mkdir /var/lib/jenkins/.ssh; chmod 700 /var/lib/jenkins/.ssh
  5. cd /var/lib/jenkins/.ssh
  6. Créez une paire de clés à l'aide de ssh-keygen, ajoutez une clé à bitbucket, etc.
  7. Création d'un identifiant dans Jenkins pour le fichier id_rsa nouvellement créé
  8. Création d'un nouveau projet pour utiliser le plugin git avec l'URL du référentiel et le fichier id_rsa.pub

Merci pour l'aide.

3
Farrukh Najmi

Dans mon cas, le problème était l'empreinte digitale de la clé RSA. J'ai ajouté la clé ssh pour l'utilisateur Jenkins comme décrit dans la documentation, mais j'ai reçu le même message d'erreur. Je l'ai résolu en me connectant en tant qu'utilisateur Jenkins à l'aide de

Sudo su jenkins

Ensuite, j'ai tapé ce qui suit

git -c core.askpass=true ls-remote -h ssh://git@SERVER/PROJECT/REPO.git HEAD

Et j'ai le message suivant

The authenticity of Host 'SERVER ([IP_ADDRESS]:PORT)' can't be established. RSA key fingerprint is 11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:ff. Are you sure you want to continue connecting (yes/no)?

En répondant «oui» à cette question, le serveur Bitbucket est ajouté à la liste des hôtes connus, ce qui a vraiment résolu mon problème.

0
smehrlapf

pour ssh.bash

ssh -K ${PATH}/.ssh2/id_rsa_2048_b $*

export GIT_SSH = ${PATH}/ssh.bash
0
Chuanzhou Tang