2012-12-07 13 views
5

NGitを使用してGithubに接続しようとしています(秘密鍵とパスワードを使用しています)。NGit秘密鍵ファイルとの接続

誰かが私の中を歩くことができますか?

フェッチ私の通常のは次のようになります。

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

私は秘密鍵でこれを行うだろうか?

答えて

4

長い戦闘の後、Jgitの例がたくさんあり、痛みが増えているので、私は解決策を見つけました!

基本的にあなたがオーバーライドしてSessionFactoryのあなた自身で、接続時に証明書を注入:

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

そして、そのようにそれを注入:

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

クイックヒント:あなたはGIT_SSH環境変数を使用している場合Jschは、SSH接続を初期化するときに、設定されたJschConfigSessionFactoryを使用する代わりにJschを使用します。私の場合、TortoisePlink.exeが呼び出されます。 –

+0

NGitのGIT_SSH env変数に関する別の質問を作成した場合、この質問の範囲外です。 – Doug