Comment faire en sorte que Hudson prenne en charge les accès svn + ssh?

Comment faire en sorte que Hudson prenne en charge l'accès SVN + SSH?

Aujourd'hui, mon entreprise a déplacé tout le référentiel de code source vers un autre serveur et demande à tous les développeurs de commencer à utilisersvn+ssh pour accéder à tout le code source. Par exemplesvn+ssh://example.com/share/svn/repo. Notre société utilise Hudson CI pour créer automatiquement le code source.

Goal: Je dois configurer leHudson pour qu'il prenne en charge l'accèssvn+ssh.

1. Essayez F-Secure Authentication Agent

J'essaie d'utiliser F-Secure Authentication Agent pour générer une paire de clés - clé publique et clé privée. Cependant, lorsque je soumets la clé privée à l'authentification Hudson Subversion, je reçois l'erreur Hudson suivante.

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

Aucune idée de ce qui ne va pas, il semble qu’Hudson n’ait pas reconnu le format de clé privée généré par F-Secure Authentication Agent.

2. Essayez Putty

J'essaie d'utiliser Putty pour générer une paire de clés - clé publique et clé privée. Cependant, lorsque je soumets la clé privée à l'authentification Hudson Subversion, je rencontre une autre erreur

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)

Il semble que le format de clé privée Putty ne convient pas non plus à Hudson. Hmm… je pensais que toutes les méthodes de génération de clés privées devraient suivre une sorte de norme?

Solution

Googling Hudson …… .Googling error… .Googling…. toute la journée, je découvreHudson is using OpenSSH private key format. Existe-t-il d'autres outils que je peux utiliser pour convertir ma clé privée existante au format OpenSSH?

Oui,PuTTYgen.exe est livré avec une fonction pourconvert 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

Après exportation au format OpenSSH, la clé privée fonctionne comme un charme! Hudson prend désormais en charge l'accès svn + ssh.

Note
J'ai également rencontré l'erreur suivante lors de la configuration de Hudson pour prendre en charge svn + ssh, je pense que cela est également dû à un format de clé privée invalide. Après avoir utilisé le format OpenSSH, cette erreur a également disparu.

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)