Wie kann man einen SSH-Schlüssel für Hudson mit dem Git-Plugin angeben?

7

Ich habe Hudson (Continuous Integration System) mit dem Git-Plugin, das auf einem Tomcat Windows-Dienst ausgeführt wird. msysgit ist installiert und das Verzeichnis msysgit bin befindet sich im Pfad. PuTTY / Pageant / Plink sind installiert und msysgit ist für deren Verwendung konfiguriert.

Ich denke, das Problem besteht darin, dass der Benutzer, dem der Tomcat / Hudson-Dienst (lokales System) gehört, keinen SSH-Schlüssel eingerichtet hat, um das Git-Repository klonen zu können. Wenn das Git Hudson Plugin versucht zu klonen, gibt es den Fehler:

$ git clone -o origin git@hostname:project.git "e:\HUDSON_HOME\jobs\Project Trunk\workspace"
ERROR: Error cloning remote repo 'origin' : Could not clone git@hostname:project.git
ERROR: Cause: Error performing git clone -o origin git@hostname:project.git e:\HUDSON_HOME\jobs\Project Trunk\workspace
Trying next repository
ERROR: Could not clone from a repository
FATAL: Could not clone
hudson.plugins.git.GitException: Could not clone

Meine Frage ist, wie kann ich die Dinge so einrichten, dass das Git-Plugin / msysgit weiß, dass es beim Klonen einen bestimmten privaten SSH-Schlüssel verwendet? Ich glaube nicht, dass Pageant funktioniert, da der Tomcat-Dienst als Benutzer "Lokales System" ausgeführt wird, aber ich kann mich irren.

BEARBEITEN:

Ich habe versucht, Pageant als Dienst einzurichten (mithilfe von runassvc.exe), den entsprechenden Schlüssel zu übergeben und ihn als "lokales System" ausführen zu lassen. Der andere Dienst scheint den Schlüssel des Festspieldienstes nicht sehen zu können.

jlpp
quelle
Ich bin nicht sicher, ob es die beste Idee ist, Hudson mit dem Benutzer (des lokalen Systems) auszuführen. Versuchen Sie, ein anderes Benutzerkonto zu verwenden, um Hudson auszuführen.
Peter Schuetze
Guter Punkt, aber selbst wenn ich als anderer Benutzer arbeite, wie würde ich Hudson dazu bringen, den SSH-Schlüssel zu "sehen"?
Jlpp

Antworten:

2

Sie sollten dies auf jeden Fall unter einem Nicht-Systembenutzer zum Laufen bringen können. Wählen Sie einen Benutzer aus, um Hudson auszuführen, und versuchen Sie dann, über ssh user @ host eine Verbindung zum Server herzustellen. Wenn Sie nach einem Passwort gefragt werden, wird Ihr Schlüssel offensichtlich nicht gefunden.

Überprüfen Sie in diesem Fall noch einmal, ob der Schlüssel in pageant geladen ist (Sie müssen pageant veranlassen, den relevanten Schlüssel bei jedem Start von der Festplatte zu laden) und ob die Umgebungsvariable GIT_SSH festgelegt ist.

Eine andere Möglichkeit besteht darin, die Umgebungsvariable GIT_SSH so festzulegen, dass sie einen Verweis auf den Schlüssel enthält. Ich mache dies derzeit mit Tunnelier und SV, also ist meine SVN_SSH-Variable beispielsweise "sexec -pk = 1", wobei sexec die ssh-CLI von tunnelier ist und -pk = 1 es anweist, meinen privaten Schlüssel in Steckplatz 1 zu verwenden.

imoatama
quelle
0

Sie können dies mit openssh-Schlüsseln anstelle von putty tun. Putty hat die Herausforderung, dass ein Festzug ausgeführt werden muss, aber mit einem openssh-Schlüssel muss nur der id_rsa-Schlüssel in ~ / .ssh sein

Normalerweise würde ich Jenkins so einrichten, dass er als neuer Benutzer ausgeführt wird, den ich erstelle. Ich gehe in das Ausgangsverzeichnis des Benutzers (standardmäßig C: \ Users \ unter Windows Vista und höher) und erstelle ein SSH-Verzeichnis, in dem ich eine id_rsa-Datei mit dem privaten Schlüssel ablege, den ich im openssh-Format verwenden möchte.

Ich musste nur einen ähnlichen Trick auf dem Mac herausfinden: http://colonelpanic.net/2011/06/jenkins-on-mac-os-x-git-w-ssh-public-key/

Taxilian
quelle
1
FWIW, unter Windows (x64) ist das Verzeichnis "user" "~" des lokalen Systems%WINDIR%\SysWOW64\config\systemprofile
Adam Rofer