2012-12-07 5 views
5

Ich versuche, NGit zu verwenden, um eine Verbindung zu Github herzustellen (dh mit einem privaten Schlüssel und einem Kennwort).NGit macht eine Verbindung mit einer privaten Schlüsseldatei

Kann jemand mich durch es gehen?

Meine normale holen wäre:

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

wie würde ich tun dies mit einem privaten Schlüssel?

Antwort

4

Nach einer langen Schlacht, viele viele Google sucht nach Jgit Beispiele und viel mehr Schmerzen, habe ich die Lösung gefunden!

Grundsätzlich Sie außer Kraft setzen und Session mit Ihrem eigenen und Ihrem Zertifikat zum Zeitpunkt der Verbindung injizieren:

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); 
    } 
} 

Und dann spritzen wie so:

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(); 
+1

Quick-Tipp: Wenn Sie eine Umgebung GIT_SSH Variable gesetzt, wird Jsch das verwenden, anstatt die konfigurierte JschConfigSessionFactory zu verwenden, wenn sie ihre SSH-Verbindung initialisiert. In meinem Fall wird es TortoisePlink.exe aufrufen. –

+0

Wenn Sie eine weitere Frage über die GIT_SSH env-Variable für NGit erstellen, habe ich die Antwort - für diese Frage jedoch nicht in Betracht gezogen. – Doug

Verwandte Themen