2016-12-28 16 views
4

Имея некоторые проблемы с аутентификацией с 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("[email protected] .repository.git", path, co); 

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

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

ошибка я в конечном итоге с:

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

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

ответ

1

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

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

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

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

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

    ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAoblahblahblahblahblah

Я добавил имя пользователя git, потому что это то, что требует Bitbucket. Не уверен, что вам это нужно, но это не может быть null, do 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(): Authentication failed using public key: Invalid key data, not base64 encoded