NGit hace una connection con un file de key privada

Estoy tratando de usar NGit para conectarme a Github (es decir, usando una key privada y una contraseña).

¿Alguien me puede guiar?

Mi búsqueda normal sería:

var git = Git.CloneRepository() .SetDirectory(_properties.OutputPath) .SetURI(_properties.SourceUrlPath) .SetBranchesToClone(new Collection<string>() { "master" }) .SetCnetworkingentialsProvider(new UsernamePasswordCnetworkingentialsProvider("username","password")) .SetTimeout(3600) .Call(); 

¿cómo podría hacer esto con una key privada?

Después de una larga batalla, muchas búsquedas de Google para ejemplos Jgit y mucho más dolor, ¡he encontrado la solución!

Básicamente reemplaza y SessionFactory con el suyo e inyecta su certificate en el momento de la connection:

 public class CustomConfigSessionFactory : JschConfigSessionFactory { public string PrivateKey { get; set; } public string PublicKey { get; set; } protected override void Configure(OpenSshConfig.Host hc, Session session) { var config = new Properties(); config["StrictHostKeyChecking"] = "no"; config["PrefernetworkingAuthentications"] = "publickey"; session.SetConfig(config); var jsch = this.GetJSch(hc, FS.DETECTED); jsch.AddIdentity("KeyPair", Encoding.UTF8.GetBytes(PrivateKey), Encoding.UTF8.GetBytes(PublicKey), null); } } 

Y luego inyectarlo así:

 var customConfigSessionFactory = new CustomConfigSessionFactory(); customConfigSessionFactory.PrivateKey = properties.PrivateKey; customConfigSessionFactory.PublicKey = properties.PublicKey; NGit.Transport.JschConfigSessionFactory.SetInstance(customConfigSessionFactory); var git = Git.CloneRepository() .SetDirectory(properties.OutputPath) .SetURI(properties.SourceUrlPath) .SetBranchesToClone(new Collection<string>() { "master" }) .Call();