我试图使用这个库" libgit2sharp"通过SSH密钥克隆存储库...我找不到任何东西......我可以通过" https"克隆它但我想要做的是使用SSH密钥。它是否得到支持真的不清楚。
答案 0 :(得分:2)
截至目前,有一个使用libssh2库的SSH实现。你可以在LibGit2Sharp - SSH
找到它您应该在项目上添加libgit2sharp-ssh依赖项以便能够使用它。它以金块形式提供:https://www.nuget.org/packages/LibGit2Sharp-SSH
免责声明:我还没有找到正式的使用指南,我所知道的是通过LibGit2论坛将其他用户问题的点点滴滴放在一起。
根据我的理解,您需要使用SshUserKeyCredentials或SshAgentCredentials创建新凭据以使用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);
}