Wie kann Hudson die Unterstützung von svn + ssh ermöglichen?

Wie kann Hudson den Zugriff auf SVN + SSH unterstützen?

Heute hat mein Unternehmen das gesamte Quellcode-Repository auf einen anderen Server verschoben und alle Entwickler aufgefordert,svn+ssh zu verwenden, um auf den gesamten Quellcode zuzugreifen. Zum Beispielsvn+ssh://example.com/share/svn/repo. Unser Unternehmen verwendet Hudson CI, um den Quellcode automatisch zu erstellen.

Goal: Ich muss dieHudson so konfigurieren, dass sie den Zugriff vonsvn+sshunterstützen.

1. Versuchen Sie es mit dem F-Secure Authentication Agent

Ich versuche, mit dem F-Secure Authentication Agent ein Schlüsselpaar zu generieren - den öffentlichen und den privaten Schlüssel. Wenn ich jedoch einen privaten Schlüssel an die Hudson Subversion Authentication sende, stoße ich auf den folgenden Hudson-Fehler.

Error
Attempting a public key authentication with username example
Failed to authenticate: svn: File 'NULL' is not valid OpenSSH DSA or RSA private key file
FAILED: svn: Authentication failed for svn+ssh://example.com/share/svn/repo

Keine Ahnung, was los ist. Es sieht so aus, als hätte Hudson das vom F-Secure Authentication Agent generierte Format des privaten Schlüssels nicht erkannt.

2. Versuchen Sie es mit Putty

Ich versuche, mit Putty ein Schlüsselpaar zu generieren - öffentlichen und privaten Schlüssel. Wenn ich jedoch einen privaten Schlüssel an die Hudson Subversion Authentication übermittle, habe ich einen anderen Fehler festgestellt

javax.servlet.ServletException: java.lang.NullPointerException
    org.kohsuke.stapler.Stapler.invoke(Stapler.java:449)
    org.kohsuke.stapler.MetaClass$9.doDispatch(MetaClass.java:263)
    org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:30)
    org.kohsuke.stapler.Stapler.invoke(Stapler.java:440)
    org.kohsuke.stapler.Stapler.invoke(Stapler.java:361)
    org.kohsuke.stapler.Stapler.service(Stapler.java:121)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:61)
    hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:53)
    hudson.security.HudsonFilter.doFilter(HudsonFilter.java:88)
root cause

java.lang.NullPointerException
    org.kohsuke.putty.PuTTYKey.toKey(PuTTYKey.java:140)
    org.kohsuke.putty.PuTTYKey.(PuTTYKey.java:108)
    org.kohsuke.putty.PuTTYKey.(PuTTYKey.java:69)
    hudson.scm.SubversionSCM$DescriptorImpl.doPostCredential(SubversionSCM.java:1111)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:103)
    org.kohsuke.stapler.Function.bindAndinvoke(Function.java:57)
    org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:75)
    org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:30)
    org.kohsuke.stapler.Stapler.invoke(Stapler.java:440)
    org.kohsuke.stapler.MetaClass$9.doDispatch(MetaClass.java:263)
    org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:30)
    org.kohsuke.stapler.Stapler.invoke(Stapler.java:440)
    org.kohsuke.stapler.Stapler.invoke(Stapler.java:361)
    org.kohsuke.stapler.Stapler.service(Stapler.java:121)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:61)
    hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:53)
    hudson.security.HudsonFilter.doFilter(HudsonFilter.java:88)

Es sieht so aus, als ob das private Putty-Schlüsselformat auch für Hudson nicht geeignet ist. Hmm… ich dachte, alle Methoden zur Generierung privater Schlüssel sollten einem Standard folgen?

Lösung

Googeln Hudson… .Googeln Fehler… .Googeln…. den ganzen Tag finde ichHudson is using OpenSSH private key format heraus. Gibt es andere Tools, mit denen ich meinen vorhandenen privaten Schlüssel in das OpenSSH-Format konvertieren kann?

Ja,PuTTYgen.exe hat eine Funktion fürconvert putty private key to OpenSSH private key format. Great news, i import my existing Putty generated private key and click on the export to OpenSSH format.

image

Nach dem Export in das OpenSSH-Format funktioniert der private Schlüssel wie ein Zauber! Der Hudson unterstützt jetzt den Zugriff auf svn + ssh.

Note
Ich habe auch den folgenden Fehler während der Konfiguration von Hudson getroffen, um svn + ssh zu unterstützen. Ich denke, das liegt auch am ungültigen Format des privaten Schlüssels. Nach der Verwendung des OpenSSH-Formats ist dieser Fehler ebenfalls behoben.

INFO: Failed to access subversion repository svn+ssh://example.com/share/svn/repo
org.tmatesoft.svn.core.SVNCancelException: svn: No credential to try. Authentication failed
    at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.cancel(SVNErrorManager.java:36)
    at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.cancel(SVNErrorManager.java:31)
    ...
    at org.tmatesoft.svn.core.internal.io.svn.SVNSSHConnector.open(SVNSSHConnector.java:70)
    at org.tmatesoft.svn.core.internal.io.svn.SVNConnection.open(SVNConnection.java:73)