我正在尝试使用库“libgit2sharp”通过 SSH 密钥克隆存储库……我找不到任何东西……我可以通过“https”克隆它,但我想做的是使用一个 SSH 密钥。是否支持它真的不清楚。
截至目前,有一个使用 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
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)
| 归档时间: |
|
| 查看次数: |
2365 次 |
| 最近记录: |