開発者ドキュメント

Hudsonにsvn + sshアクセスをサポートさせるには?

今日私の会社では、すべてのソースコードリポジトリを別のサーバに移動し、すべての開発者に

svn + ssh

を使用してすべてのソースコードにアクセスするよう要求しています。例えば

svn + ssh://mkyong.com/share/svn/repo

。当社はHudson CIを使用してソースコードを自動的に構築しています。

1. F-Secure認証エージェントを試す

私は、F-Secure認証エージェントを使用して、公開鍵と秘密鍵のペアを生成しようとしています。しかし、私がHudson Subversion認証に私有鍵を提出すると、私はHudsonのエラーに続いてヒットします。

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

何が間違っているのか分かりません.HudsonはF-Secure認証エージェントによって生成された秘密鍵形式を認識していないようです。

2.パテを試す

私は、公開鍵と秘密鍵のペアを生成するためにパテを使用しようとします。しかし、私がHudson Subversion認証に秘密鍵を提出すると、別のエラーが発生する

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.<init>(PuTTYKey.java:108)
    org.kohsuke.putty.PuTTYKey.<init>(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)

パテの秘密鍵の形式はハドソンにも適していないようです。うーん…​私はすべての秘密鍵の生成方法は何らかの基準に従うべきだと思った?

解決策

グーグルのハドソン…​…​.グーグルのエラー…​.グーグル…​.一日中、私は知っている

ハドソンは、OpenSSHの秘密キー形式

を使用しています。既存の秘密鍵をOpenSSH形式に変換するために使用できる他のツールはありますか?

はい、

PuTTYgen.exe

には、puttyの秘密鍵をOpenSSHの秘密鍵形式に変換する機能があります。素晴らしいニュース、私は自分の既存のパテをインポートして秘密鍵を生成し、OpenSSH形式へのエクスポートをクリックします。



OpenSSH形式にエクスポートした後、秘密鍵は魅力的なように機能します!

ハドソンは現在svn + sshアクセスをサポートしています。

  • 注** 私はまた、構成ハドソンの間にsvn sshをサポートするために次のエラーが発生しました。私はそれが無効な秘密鍵の形式であると考えています。 OpenSSH形式を使用した後も、このエラーは発生しています。

INFO: Failed to access subversion repository svn+ssh://mkyong.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)
モバイルバージョンを終了