Я пытаюсь использовать библиотеку "libgit2sharp" для клонирования репозитория с помощью ключа SSH и... я ничего не могу найти... я могу клонировать его через "https", но я хотел бы использовать SSH-ключ. Правда непонятно, поддерживается он или нет.
клонировать репозиторий git с помощью SSH и libgit2sharp
Ответы (1)
На данный момент существует реализация SSH с использованием библиотеки libssh2. Вы можете найти его здесь LibGit2Sharp — SSH
Вы должны добавить зависимость libgit2sharp-ssh к вашему проекту, чтобы иметь возможность его использовать. Он доступен в виде слепка: https://www.nuget.org/packages/LibGit2Sharp-SSH
Отказ от ответственности: я еще не нашел формального руководства по использованию, все, что я знаю, основано на сборе фрагментов ответов других пользователей на форумах LibGit2.
Насколько я понял, вам нужно будет создать новые учетные данные, используя либо SshUserKeyCredentials ИЛИ SshAgentCredentials для аутентификации используя SSH, и передать его как часть CloneOptions .
В примере кода я использую «git» в качестве пользователя просто потому, что удаленным будет что-то вроде [email protected]:project/reponame.git , и в этом случае « git" является правильным пользователем, иначе вы получите сообщение об ошибке
$exception {"username does not match previous request"}LibGit2Sharp.LibGit2SharpException
Код для клонирования репо с SSH должен быть примерно таким:
public CloneOptions cloningSSHAuthentication(string username, string path_to_public_key_file, string path_to_private_key_file)
{
CloneOptions options = new CloneOptions();
SshUserKeyCredentials credentials = new SshUserKeyCredentials();
credentials.Username = username;
credentials.PublicKey = path_to_public_key_file;
credentials.PrivateKey = path_to_private_key_file;
credentials.Passphrase = "ssh_key_password";
options.CredentialsProvider = new LibGit2Sharp.Handlers.CredentialsHandler((url, usernameFromUrl, types) => credentials) ;
return options;
}
public CloneOptions cloneSSHAgent(string username){
CloneOptions options = new CloneOptions();
SshAgentCredentials credentials = new SshAgentCredentials();
credentials.Username = username;
var handler = new LibGit2Sharp.Handlers.CredentialsHandler((url, usernameFromUrl, types) => credentials);
options.CredentialsProvider = handler;
return options;
}
public void CloneRepo(string remotePath, string localPath){
CloneOptions options = cloningSSHAuthentication("git", "C:\\folder\\id_rsa.pub", "C:\\folder\\id_rsa");
Repository.Clone(remotePath, localPath, options);
}