Clonar el repository git sobre ssh con nombre de usuario y contraseña por Java

Estoy intentando clonar un proyecto de git con Java sobre ssh. Tengo el nombre de usuario y la contraseña de un usuario de git-shell como cnetworkingenciales. Puedo clonar el proyecto en la terminal usando el siguiente command sin problemas. (Por supuesto, primero solicita la contraseña)

git clone user@HOST:/path/Example.git 

Sin embargo, cuando bash el siguiente código usando JGIT api

 File localPath = new File("TempProject"); Git.cloneRepository() .setURI("ssh://HOST/path/example.git") .setDirectory(localPath) .setCnetworkingentialsProvider(new UsernamePasswordCnetworkingentialsProvider("***", "***")) .call(); 

tengo

 Exception in thread "main" org.eclipse.jgit.api.errors.TransportException: ssh://HOST/path/example.git: Auth fail 

¿Que debería hacer? ¿Algunas ideas? (Estoy usando OSX 10.9.4 y JDK 1.8)

Para la authentication con SSH, JGit usa JSch . JSch proporciona una SshSessionFactory para crear y eliminar conexiones SSH. La forma más rápida de indicarle a JGit qué fábrica de sesiones SSH debería utilizarse es establecerla globalmente a través de SshSessionFactory.setInstance() .

JGit proporciona una JschConfigSessionFactory abstracta, cuyo método de configure se puede anular para proporcionar la contraseña:

 SshSessionFactory.setInstance( new JschConfigSessionFactory() { @Override protected void configure( Host host, Session session ) { session.setPassword( "password" ); } } ); Git.cloneRepository() .setURI( "ssh://username@host/path/repo.git" ) .setDirectory( "/path/to/local/repo" ) .call(); 

Configurar SshSessionFactory de una manera más sensata es un poco más complejo. El CloneCommand , como todas las classs de command JGit que pueden abrir una connection, henetworkinga de TransportCommand . Esta class tiene un método setTransportConfigCallback() que también se puede usar para especificar la fábrica de sesiones SSH para el command real.

 CloneCommand cloneCommand = Git.cloneRepository(); cloneCommand.setTransportConfigCallback( new TransportConfigCallback() { @Override public void configure( Transport transport ) { if( transport instanceof SshTransport ) { SshTransport sshTransport = ( SshTransport )transport; sshTransport.setSshSessionFactory( ... ); } } } );