it-swarm.com.de

Jenkins git plugin mit ssh Zugang zu bitbucket: Berechtigung verweigert (publickey). fatal: Konnte nicht aus dem Remote-Repository lesen

Ich kann nicht, dass Jenkins Git-Plugin sich mit einem privaten Git-Repo auf Bitbucket.org authentifiziert. Ich habe ein privates/öffentliches Schlüsselpaar mit ssh-keygen generiert und den öffentlichen Schlüssel in meinem Bitbucket-Konto unter ssh keys-Kontoseite festgelegt.

Auf der Jobkonfigurationsseite habe ich den Abschnitt Quellcodeverwaltung wie folgt festgelegt:

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.

Es wird sofort folgender Fehler ausgegeben:

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.

Wenn ich denselben git-Befehl von der Befehlszeile im Arbeitsbereich-Verzeichnis in einer Shell aus mache, funktioniert das einwandfrei. Ich habe mein ~/.bashrc in Build Environment/Properties File Path angegeben, also bin ich verwirrt, was anders sein könnte, wenn es im Jenkins-Job läuft.

Ich habe nur zwei Benutzer auf meiner Jenkins-Maschine (Jenkins und Root) und ich habe den Befehl git als Benutzer Jenkins ausgeführt. Das Home-Verzeichnis des Benutzers jenkins ist/home/jenkins. Mein Jenkins-Job läuft als Benutzer anonym. Könnte dies das Problem sein?

Ich habe die folgenden .ssh-Dateien:

-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

Ich vermute, Sie haben Ihrem Benutzer SSH-Schlüssel hinzugefügt, nicht dem Jenkins-Benutzer.

Standardmäßig wird Jenkins von Benutzer Jenkins ausgeführt. Das Ausgangsverzeichnis ist (standardmäßig) /var/lib/jenkins. Um meine Hypothese zu überprüfen, loggen Sie sich bitte als jenkins-Benutzer ein: 

su jenkins

und Ruf an:

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

um zu prüfen, ob ein Fehler ausgegeben wird. 

Sie sollten das /var/lib/jenkins/.ssh-Verzeichnis haben, das die richtigen ssh-Schlüssel enthält. Sie müssen id_rsa.pub aus diesem Verzeichnis zu Ihrem Konto bei bitbucket hinzufügen. 

Weiter in der Auftragskonfiguration:

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

Die beschriebene Konfiguration funktioniert für meine Jenkins mit Bitbucket.

Stellen Sie außerdem sicher, dass das .ssh-Verzeichnis die richtigen Zugriffsrechte festgelegt hat. Ssh mag keine "zu offenen" Verzeichnisse:

-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

In meinem Fall hatte das Problem etwas damit zu tun, dass ein Jenkins-Benutzer bereits mit dem Home-Verzeichnis/home/jenkins erstellt wurde und dann Jenkins als Root installiert wurde. Dies hat möglicherweise zu Verwirrung zwischen dem Ausgangsverzeichnis/var/lib/jenkins (wie üblich) und/home/jenkins geführt. Die Lösung bestand darin,

  1. userdel jenkins #Delete jenkins Benutzer
  2. rm -rf/home/jenkins; rm -rf/var/lib/jenkins #Entfernen Sie die alten Jenkins-Verzeichnisse
  3. Installieren Sie Jenkins erneut als normalen Prozess, der den Benutzer Jenkins erstellt
  4. mkdir /var/lib/jenkins/.ssh; chmod 700 /var/lib/jenkins/.ssh
  5. cd /var/lib/jenkins/.ssh
  6. Erstellen Sie ein Schlüsselpaar mit ssh-keygen, fügen Sie den Schlüssel zu bitbucket usw. hinzu.
  7. Erstellen eines Berechtigungsnachweises in jenkins für die neu geprägte id_rsa-Datei
  8. Neues Projekt erstellen, um git plugin mit Repository-URL und id_rsa.pub-Datei zu verwenden

Danke für die Hilfe.

3
Farrukh Najmi

In meinem Fall war das Problem der Fingerabdruck des RSA-Schlüssels. Ich habe den ssh-Schlüssel für den Jenkins-Benutzer hinzugefügt, wie in der Dokumentation beschrieben, erhielt jedoch die gleiche Fehlermeldung. Ich habe das Problem gelöst, indem ich mich als Jenkins-Benutzer mit angemeldet habe

Sudo su jenkins

Dann gab ich folgendes ein

git -c core.askpass=true ls-remote -h ssh://[email protected]/PROJECT/REPO.git HEAD

Und erhielt die folgende Nachricht

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

Wenn Sie diese Frage mit "Ja" beantworten, wird der Bitbucket-Server zur Liste der bekannten Hosts hinzugefügt, und das hat mein Problem wirklich gelöst.

0
smehrlapf

für ssh.bash

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

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