使用SSH和libgit2sharp克隆git存储库

时间:2016-11-20 02:43:26

标签: libgit2sharp

我试图使用这个库" libgit2sharp"通过SSH密钥克隆存储库...我找不到任何东西......我可以通过" https"克隆它但我想要做的是使用SSH密钥。它是否得到支持真的不清楚。

1 个答案:

答案 0 :(得分:2)

截至目前,有一个使用libssh2库的SSH实现。你可以在LibGit2Sharp - SSH

找到它

您应该在项目上添加libgit2sharp-ssh依赖项以便能够使用它。它以金块形式提供:https://www.nuget.org/packages/LibGit2Sharp-SSH

免责声明:我还没有找到正式的使用指南,我所知道的是通过LibGit2论坛将其他用户问题的点点滴滴放在一起。

根据我的理解,您需要使用SshUserKeyCredentialsSshAgentCredentials创建新凭据以使用SSH进行身份验证,并将其作为CloneOptions的一部分传递。

在示例代码中,我使用“ git ”作为用户,因为遥控器类似于 git@bitbucket.org:project / reponame.git ,哪种情况“git”是正确的用户,否则你会收到错误

$exception  {"username does not match previous request"}LibGit2Sharp.LibGit2SharpException

使用SSH克隆repo的代码应该是这样的:

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);
}