Аутентификация NGit (порт JGit) с SSH на C#
Я пытаюсь настроить функциональность Git в моем приложении с помощью NGit. Репозиторий является SSH-аутентифицированным в BitBucket, который я не могу аутентифицировать для таких функций Git, как Push, Pull, Clone и т. Д.
Мой код выглядит следующим образом:
JschConfigSessionFactory:
public class NSessionFactory : JschConfigSessionFactory
{
protected override void Configure(OpenSshConfig.Host hc, Session session)
{
session.SetConfig("StrictHostKeyChecking", "no");
}
protected override JSch CreateDefaultJSch(FS fs)
{
JSch defaultJSch = new JSch();
defaultJSch.SetKnownHosts(@"<path>\known_hosts");
defaultJSch.AddIdentity(@"<path>\id_rsa");
return defaultJSch;
}
}
TransportConfigCallback:
public class NTransportConfigCallBack : TransportConfigCallback
{
public void Configure(Transport transport)
{
SshTransport sshTransport = (SshTransport)transport;
sshTransport.SetSshSessionFactory(new NSessionFactory());
}
}
Нажмите команду:
Git gitObj = NGit.Api.Git.Open(<path to git repo>);
PushCommand pshCmd = gitObj.Push();
pshCmd.SetRemote("ssh://git@stash.name.com:xxxx/repo.git");
pshCmd.SetTransportConfigCallback(new NTransportConfigCallBack());
pshCmd.Call();
Следующее исключение для PushCommand.Call():
"TransportException: ssh://git@stash.name.com:xxxx/repo.git: Auth fail"
Учетная запись BitBucket уже имеет настройку ключа SSH, и все работает с другими инструментами GIT.
На данный момент я понятия не имею, что может быть не так, и я был бы признателен за любые указатели в правильном направлении.
Использование C# в Visual Studio 2017 с.Net 4.5.2
РЕДАКТИРОВАТЬ 1
Изменение кода в ответе здесь приводит к тому же исключению.
1 ответ
Кажется, что ваш SSH-ключ требует парольную фразу, в этом случае используйте
defaultJsch.AddIdentity( "<path>", "<passphrase>" )