長い戦闘の後、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();
クイックヒント:あなたはGIT_SSH環境変数を使用している場合Jschは、SSH接続を初期化するときに、設定されたJschConfigSessionFactoryを使用する代わりにJschを使用します。私の場合、TortoisePlink.exeが呼び出されます。 –
NGitのGIT_SSH env変数に関する別の質問を作成した場合、この質問の範囲外です。 – Doug