2012-09-19 19 views
8

私は次のコードプッシュとプッシュが動作するように、jschconfigsessionfactoryの設定をjgitに設定するにはどうすればよいですか?

org.eclipse.jgit.api.Git.open(theRepoFile).pull().call() 

でjgitのAPIを使用してgitのプル/プッシュを行うにしようとしていますが、私は例外

JSchException Auth fail 
com.jcraft.jsch.Session.connect (Session.java:461) 
org.eclipse.jgit.transport.JschConfigSessionFactory.getSession (JschConfigSessionFactory.java:116) 
org.eclipse.jgit.transport.SshTransport.getSession (SshTransport.java:121) 
org.eclipse.jgit.transport.TransportGitSsh$SshPushConnection.<init> (TransportGitSsh.java:306) 
org.eclipse.jgit.transport.TransportGitSsh.openPush (TransportGitSsh.java:152) 
org.eclipse.jgit.transport.PushProcess.execute (PushProcess.java:130) 
org.eclipse.jgit.transport.Transport.push (Transport.java:1127) 
org.eclipse.jgit.api.PushCommand.call (PushCommand.java:153) 

を取得していたとしてもCGITプルを使用して作品をプッシュするけれども。

私は例のコードのためにSO

Java git client using jgit

をチェックしてみましたが、上記の質問には、通常、ssh経由で認証されたリモートレポにGitのプルを行うために必要なものの完全なコード化された例を提供していません。キー。資格情報を~/.ssh/または同等のものから取得する方法があります。

答えて

3

を問題はJSCHにはないですサポートssh-agentはそのままの状態です。 1つは、それを動作させるためにhttps://github.com/ymnk/jsch-agent-proxyを設定する必要があります。

代わりにorg.eclipse.jgit.transport.CredentialsProviderを作成し、org.eclipse.jgit.transport.CredentialItemを正しい値に設定することができます(ユーザーに要求するか、ファイルを検索する)。 https://github.com/bmillare/dj/blob/library/src/dj/git.clj

+0

あなたはそれを試しても効果はありましたか?あなたはそれをより詳細に記述することができますか、正確に何をするべきでしょうか?プロキシを自分のコードに統合しますか?これは、この問題を抱える次の開発者を助けるでしょう。 – Vince

+0

私は実際にjsch-agent-proxyを使用していませんでしたが、私は自分のCredentialsProviderを作成して、ユーザーにパスフレーズを尋ねました。実際にはクロージャーで書かれていますが、詳細はそこにあります。 https://github.com/bmillare/dj/blob/library/src/dj/git.clj – bmillare

-1

ログが非常に明示的ではないため、しばらく私をブロックしていたJSchでエラーが発生することを漠然と覚えています。私はそれは同じ問題だ確実に伝えることはできませんが、私は私の問題を解決するために、このページに続く:

https://help.github.com/articles/generating-ssh-keys

(それが間違ったネットワーク構成によるものであった)

+0

投稿したリンクにはjgit固有のものはありません。私は、通常のgitを使うことができると言っています。これは、sshキーがうまくいることを意味します。一つの可能​​性は、gentooキーチェーンツールを使用することです。これは、jgitが対処する方法を知らないことがあります。 – bmillare

+0

人が何を言うのか聞きたくない場合は、聞かないでください。 「ログはあまり明示的ではないので」十分にはっきりしないかもしれません.Gitが完全に機能するのと同じ方向にしか見ていない仕事の日々を失いました。私は曖昧な記憶のために私の答えが価値があるかどうか分からないが、もしあなたが試していなければ、少なくともそれはうまくいかないと確信している。 jGitとsshの両方の設定が書かれたページを見つけたら、それを投稿してもいいと思いますが、ここでの目標は次の読者が役に立つ情報を見つけることです。 – Vince

+0

ああ、全体的に、時間とともにそれを学ぶだろうが、gitはjGitよりも奇妙な使い方で耐性がある。 – Vince

11

JSCHは自動的にあなたのSSHキーを検出しますが、これらは、パスワードで保護されている場合に失敗します:あなたは、詳細については、私のClojureのライブラリのDJを参照してくださいorg.eclipse.jgit.transport.CredentialsProvider/setDefault

でデフォルトCredentialsProviderを変更することができます。パスフレーズは、次のようにCredentialsProviderで指定する必要があります。

JschConfigSessionFactory sessionFactory = new JschConfigSessionFactory() { 
@Override 
protected void configure(OpenSshConfig.Host hc, Session session) { 
    CredentialsProvider provider = new CredentialsProvider() { 
     @Override 
     public boolean isInteractive() { 
      return false; 
     } 

     @Override 
     public boolean supports(CredentialItem... items) { 
      return true; 
     } 

     @Override 
     public boolean get(URIish uri, CredentialItem... items) throws UnsupportedCredentialItem { 
      for (CredentialItem item : items) { 
       ((CredentialItem.StringType) item).setValue("yourpassphrase"); 
      } 
      return true; 
     } 
    }; 
    UserInfo userInfo = new CredentialsProviderUserInfo(session, provider); 
    session.setUserInfo(userInfo); 
} 
}; 
SshSessionFactory.setInstance(sessionFactory); 
+0

これは大変ありがとうございます - 私はJGitのSSH認証に苦労していましたが、これを発見してすぐに問題を解決しました。どうもありがとう。 –

+0

@JoPintoPaul:私は同様のスニペットを使ってこれをやってみました。助けてください。私の質問は次のとおりです:https://stackoverflow.com/questions/45889326/userauth-fail-using-jgit-to-access-git-repo-securely-for-pullcommand – mohanjot

関連する問題