經過長時間的戰鬥,許多谷歌搜索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。在我的情況下,它會調用TortoisePlink.exe。 –
如果您爲NGIT創建了另一個關於GIT_SSH env變量的問題,我有答案 - 儘管這個問題超出了範圍。 – Doug