Проблемы с аутентификацией с помощью 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, имени пользователя, PublicKey и фразы-пароля. В настоящее время я использую PrivateKey.

Ошибка, с которой я столкнулся:

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

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


person Kim Lindqvist    schedule 28.12.2016    source источник


Ответы (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

person MikeJansen    schedule 24.05.2017
comment
Я получаю сообщение об ошибке еще до того, как код достигает CredentialsHandler, поэтому у меня нет возможности указать какое-либо из этих значений. - person Triynko; 20.11.2018
comment
Кто-нибудь когда-нибудь исправлял эту проблему? - person Per Erik Gransøe; 08.10.2020
comment
Похоже, этот ответ не работает должным образом. Также openssl не удалось сгенерировать PEM из вашего фрагмента. ssh-keygen -f id_rsa -e -m pem > id_rsa.pem работает лучше. Не помогает, так как CredentialsHandler даже не вызывается (LibGitSharp-SSH 1.0.22, NET 5.0). - person Krzysztof Bociurko; 11.06.2021