клонировать репозиторий git с помощью SSH и libgit2sharp

Я пытаюсь использовать библиотеку "libgit2sharp" для клонирования репозитория с помощью ключа SSH и... я ничего не могу найти... я могу клонировать его через "https", но я хотел бы использовать SSH-ключ. Правда непонятно, поддерживается он или нет.


person ssougnez    schedule 20.11.2016    source источник


Ответы (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);
}
person Anika    schedule 21.03.2017
comment
Этот подход все еще работает? Я пробовал этот подход, но получаю следующее исключение: Не удалось аутентифицировать сеанс SSH: обратный вызов вернул ошибку в LibGit2Sharp.Core.Ensure.HandleError (результат Int32) в c:\projects\libgit2sharp\LibGit2Sharp\Core\Ensure.cs:line 137 - person Jason; 30.11.2018
comment
Я думаю, было бы лучше, если бы вы разместили его как отдельный вопрос с вашим кодом и версией libgit2sharp. Прошло много времени с тех пор, как я в последний раз просматривал этот код. - person Anika; 30.11.2018