NGit che effettua una connessione con un file di chiave privata

Sto cercando di utilizzare NGit per connettersi a Github (cioè utilizzando una chiave privata e una password).

Qualcuno mi può farmi passare attraverso?

Il mio recupero normale sarebbe:

var git = Git.CloneRepository() .SetDirectory(_properties.OutputPath) .SetURI(_properties.SourceUrlPath) .SetBranchesToClone(new Collection() { "master" }) .SetCredentialsProvider(new UsernamePasswordCredentialsProvider("username","password")) .SetTimeout(3600) .Call(); 

come farei questo con una chiave privata?

    Dopo una lunga battaglia, molte ricerche su google per gli esempi di Jgit e molto più dolore, ho trovato la soluzione!

    Fondamentalmente si esegue l’override e SessionFactory con il proprio e si inserisce il certificato al momento della connessione:

     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["PreferredAuthentications"] = "publickey"; session.SetConfig(config); var jsch = this.GetJSch(hc, FS.DETECTED); jsch.AddIdentity("KeyPair", Encoding.UTF8.GetBytes(PrivateKey), Encoding.UTF8.GetBytes(PublicKey), null); } } 

    E poi iniettalo in questo modo:

     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() { "master" }) .Call();