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)