Проблема аутентификации с SshUserKeyCredentials в libgit2sharp-SSH

Возникли проблемы при аутентификации с помощью SshUserKeyCredentials с использованием libgit2sharp-SSH:

var co = new CloneOptions();
co.CredentialsProvider = (_url, _user, _cred) => new SshUserKeyCredentials { PrivateKey="C:\\path\\to\\private_key" };
Repository.Clone("git@... .repository.git", path, co);

Я обнаружил, что объект SshUserKeyCredentials просматривает исходный код, поэтому мой первый вопрос будет таким: возможно ли использовать этот объект для выполнения проверки на основе ключа развертывания из gitlab?

Кажется, объекту нужна любая комбинация PrivateKey, Username, PublicKey и Passphrase. В настоящее время я использую PrivateKey.

Ошибка, с которой я сталкиваюсь:

{"Failed to start SSH session: Unable to exchange encryption keys"}

Если этот способ не должен работать, есть ли альтернативный способ использования ключей развертывания для программного управления git из среды C#?

1 ответ

Решение

Я смог выяснить следующее с помощью проб и ошибок и прочесывания в Интернете.

  1. Вы не можете иметь null для любого поля; использование string.Empty,

  2. Открытый и закрытый ключи должны быть предоставлены и в надлежащем формате.

  3. Закрытый ключ должен быть в формате PEM (либо используйте меню преобразования PuttyGen => Экспортировать OpenSSH, либо используйте openssl rsa -in id_rsa -out id_rsa.pem).

  4. Открытый ключ должен был состоять из одной строки, начиная с типа, за которым следует ключ base64, без комментария в конце (этот формат показан в текстовом поле открытого ключа на PuttyGen, за исключением того, что вы должны удалить комментарий), например

    ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAoblahblahblahblahblah

Я добавил имя пользователя git потому что это то, что требует Bitbucket. Не уверен, что вам это нужно, но это не может быть null, делать string.Empty,

Пример:

CredentialsHandler handler = (_url, _user, _cred) => new SshUserKeyCredentials
                    {
                        PrivateKey = @"C:\Users\blah\.ssh\keys\bitbucket.pem",
                        Username = "git",
                        Passphrase = string.Empty,
                        PublicKey = @"C:\Users\blah\.ssh\keys\bitbucket.pub"
                    }

См. Также: PHP ssh2_auth_pubkey_file (): аутентификация не удалась с использованием открытого ключа: неверные данные ключа, не закодированные в base64

Другие вопросы по тегам