使用 SSH 和 libgit2sharp 克隆一个 git 存储库

sso*_*nez 6 libgit2sharp

我正在尝试使用库“libgit2sharp”通过 SSH 密钥克隆存储库……我找不到任何东西……我可以通过“https”克隆它,但我想做的是使用一个 SSH 密钥。是否支持它真的不清楚。

Ani*_*ika 4

截至目前,有一个使用 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
Run Code Online (Sandbox Code Playgroud)

使用 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);
}
Run Code Online (Sandbox Code Playgroud)