Проблема аутентификации с 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 ответ
Я смог выяснить следующее с помощью проб и ошибок и прочесывания в Интернете.
Вы не можете иметь
null
для любого поля; использованиеstring.Empty
,Открытый и закрытый ключи должны быть предоставлены и в надлежащем формате.
Закрытый ключ должен быть в формате PEM (либо используйте меню преобразования PuttyGen => Экспортировать OpenSSH, либо используйте
openssl rsa -in id_rsa -out id_rsa.pem
).Открытый ключ должен был состоять из одной строки, начиная с типа, за которым следует ключ 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"
}