Аутентификация 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>" )
Другие вопросы по тегам