如何为jgit设置jschconfigsessionfactory的配置,以便拉动和推送工作?

我正在尝试使用jgit的api使用以下代码执行git pull / push

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

但我得到例外

 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. (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 pull and push工作。

我尝试检查SO以获取示例代码

使用jgit的Java git客户端

但上面的问题没有提供一个完整的编码示例,说明使用通常通过ssh密钥进行身份validation的远程仓库进行git pull所需的操作。 应该有办法从~/.ssh/或等效的Windows获取凭证信息。

Jsch将自动检测您的SSH密钥,但如果这些密钥受密码保护,则会失败。 您需要通过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); 

问题是Jsch不支持开箱即用的ssh-agent 。 需要配置https://github.com/ymnk/jsch-agent-proxy才能使其正常工作。

另一种方法是创建自己的org.eclipse.jgit.transport.CredentialsProvider并将org.eclipse.jgit.transport.CredentialsProvider设置为正确的值(通过从用户请求它们或查找文件)。 您可以使用org.eclipse.jgit.transport.CredentialsProvider/setDefault更改默认的CredentialsProvider

有关详细信息,请参阅我的clojure库dj: https : //github.com/bmillare/dj/blob/library/src/dj/git.clj

我依稀记得在JSch中遇到一个错误,因为日志不是很清楚,因此阻止了我一段时间。 我无法确定这是同样的问题,但我按照这个页面来解决我的问题:

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

(这是由于错误的网络配置)