webentwicklung-frage-antwort-db.com.de

Berechtigung verweigert (öffentlicher Schlüssel) beim Abrufen von GitHub mit Jenkins-Benutzer unter Ubuntu

Hier ist mein Setup:

  1. Jenkins läuft als 'Jenkins'-Benutzer auf meinem Linux-Rechner.
  2. Ich habe ein ssh-Schlüsselpaar wie in Linux - Setup Git für den Benutzer 'jenkins' beschrieben erstellt.
  3. Wenn ich Sudo su jenkins probiere und ssh -vT [email protected] versuche, werde ich immer nach meiner Passphrase gefragt, aber ich bin immer irgendwann authentifiziert. (Die ausführliche Option zeigt unter anderem, welche Taste verwendet wird).
  4. Ich könnte mein Repo von GitHub mit Jenkins klonen:

Also:

[email protected]:~/jobs/test git/workspace$ git pull 
Enter passphrase for key '/var/lib/jenkins/.ssh/id*_rsa':
Already up-to-date.

Bis zu diesem Punkt habe ich die Anweisungen zu dem Brief befolgt. Das Problem ist, dass der Jenkins-Job mit dem folgenden Fehler fehlschlägt:

status code 128:
stdout: 
stderr: Permission denied (publickey).
fatal: The remote end hung up unexpectedly

Dies ist derselbe Fehler, den ich bekomme, wenn ich die Passphrase tippe (aber Jenkins fragt mich natürlich nicht nach der Passphrase). Folgende seiten:

weisen Sie darauf hin, dass der ssh-agent dabei helfen kann, sich an die Passphrase zu erinnern, die er ausführt, wenn ich meinen eigenen Benutzer verwende, nicht jedoch die jenkins -ID. Beachten Sie, dass es bei meinem normalen Benutzer Folgendes gibt:

echo "$SSH_AUTH_SOCK"
/tmp/keyring-nQlwf9/ssh

Während das Ausführen des gleichen Befehls wie meine 'Jenkins' nichts ergibt (nicht einmal die Erlaubnis verweigert)

Ich verstehe das Problem so, dass die Passphrase nicht in Erinnerung bleibt . Haben Sie eine Idee? Soll ich einen ssh-agent oder einen Schlüsselring-Manager für den jenkins-Benutzer starten? Ist SSH-Weiterleitung geeignet, wenn an dieselbe Maschine weitergeleitet wird? Gibt es eine hellere Idee?

ps: Ich habe nie Sudo gitted, ich habe immer jenkins oder mein Benutzerkonto verwendet (wie in diesem SO post - Ubuntu/GitHub SSH Key Issue ) erwähnt.

30
pimajor

Da über mehrere Monate niemand die Antwort aus den Kommentaren geschrieben hat, werde ich das schnell tun.

Es gibt 2 mögliche Probleme/Lösungen:

  1. id_rsa mit falschem Benutzer erstellt

    Erstellen Sie id_rsa als jenkins-Benutzer (siehe hudson kann nicht aus git repository holen.)

  2. Lassen Sie die Passphrase leer

39
Patrick Boos

Ich bin dieses Problem umgangen, indem ich beim Erstellen der Schlüssel einfach die Passphrase leer gelassen habe.

8
Marco Corona

Um zusammenzufassen, was auf dem Jenkins-Server zu tun ist:

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

Merken:

  • Bitte behalten Sie den Standardnamen "id_rsa" bei der Generierung der Schlüssel bei, da andere wie "id_rsa_jenkins" nicht funktionieren, selbst wenn sie richtig eingerichtet sind.
  • Verwenden Sie keine Passphrase für Ihren Schlüssel
  • Prüfen Sie, ob der öffentliche Schlüssel (id_rsa.pub) auf dem git-Server (GitHub, Bitbucket usw.) hochgeladen wurde. Testen Sie anschließend Ihren SSH-Schlüssel, indem Sie Folgendes ausführen: ssh -vvv [email protected] (Adresse gemäß Ihrem Git-Server ändern)
7
Paul Podgorsek

Ich würde hinzufügen, dass wenn Sie die Schlüssel von Hand erstellt haben, sie möglicherweise immer noch in Ihrem Besitz sind und nicht von jenkins gelesen werden können, versuchen Sie Folgendes:

Sudo chown jenkins -R /var/lib/jenkins/.ssh/*
3
stoyan

Zu prüfen sind folgende:

  1. wenn der rechte öffentliche Schlüssel (id_rsa.pub) auf den git-server hochgeladen wird.
  2. benutzer von jenkins greifen auf github -> to CHECKzu, wenn der rechte private Schlüssel (id_rsa) in /var/lib/jenkins/.ssh/kopiert wird
  3. wenn die known_hosts-Datei im Ordner ~/.ssh erstellt wird. Versuchen Sie ssh -vvv [email protected], um Debug-Protokolle anzuzeigen. Wenn alles gut geht, wird github.com known_hosts hinzugefügt.
  4. wenn die Erlaubnis von id_rsa auf 755 gesetzt ist (chmod 755 id_rsa)

Nach allen Prüfungen -> try ssh -vvv [email protected] Versuchen Sie nicht, die Konfiguration in jenkins vorzunehmen, bis ssh funktioniert!

2
Tim Long

Wenn Sie Jenkins als Dienst in Windows ausführen, müssen Sie den Benutzer, der den Dienst ausführt überprüfen. Wenn Sie die Schlüssel mit dem Benutzer "MACHINENAME\user" erstellt haben, ändern Sie den Dienst, damit der Benutzer, auf dem er ausgeführt wird, übereinstimmt

1

Für Mac-Benutzer kann das Problem gelöst werden, indem die vorhandenen Schlüssel entfernt und neue private und öffentliche Schlüssel erstellt werden. Führen Sie dazu die folgenden Schritte aus:

1.Entfernen Sie alle Public- und Private-Schlüssel unter /Users/Username/.ssh.

2.Entfernen Sie alle Anmeldeinformationen, die in Jenkins auf der Registerkarte Credentials gespeichert sind.

3.Entfernen Sie die vorhandenen Public SSH-Schlüssel, die in den Github Repository-Einstellungen definiert sind.

4.Erstellen Sie neue SSH-Schlüssel (privat und öffentlich: id_rsa und id_rsa.pub), indem Sie die Schritte ab https://confluence.atlassian.com/bitbucketserver/creating-ssh-keys-776639788.html ausführen # CreatingSSHkeys-CreatinganSSHkeyonLinux & MacOSX

5.Setzen Sie den neu erstellten öffentlichen SSH-Schlüssel (id_rsa.pub) in Github oder einen entsprechenden Repository-Einstellungen.

6. Erstellen Sie in Jenkins neue Anmeldeinformationen, indem Sie den private SSH-Schlüssel (id_rsa) für Ihren Github-Benutzernamen hinzufügen.

7. Der Fehler sollte jetzt entfernt werden.

1
DeveloperIOS

schlüssel müssen von Jenkins-Benutzer generiert werden.

Sudo su jenkins
ssh-keygen

sobald der Schlüssel generiert wurde, sollte er als ssh-Schlüssel in bitbucket oder github hinzugefügt werden.

0
blazehub