LibGit2Sharp v0.31.0中如何使用带密码的SSH密钥作为凭证?
在LibGit2Sharp v0.31.0中处理带密码的SSH私钥凭证
LibGit2Sharp v0.31.0通过libgit2的OpenSSH支持实现SSH功能,对应的SSH密钥凭证类是SshUserKeyCredentials——这就是你要找的、替代HTTPS场景下UsernamePasswordCredentials的SSH专用凭证类,专门用于处理带密码保护的私钥认证。
核心说明
- 无需额外依赖系统OpenSSH客户端,LibGit2Sharp通过内置的libgit2实现完成SSH交互
SshUserKeyCredentials支持配置私钥路径、公钥路径,以及私钥的加密密码(Passphrase)
克隆仓库的代码示例
using LibGit2Sharp; var cloneOptions = new CloneOptions { CredentialsProvider = (url, usernameFromUrl, types) => { return new SshUserKeyCredentials { Username = "git", // Git SSH服务通用用户名,部分服务可按需调整 Passphrase = "your-private-key-passphrase", // 私钥的加密密码 PrivateKeyPath = @"C:\Users\YourAccount\.ssh\id_rsa", // 本地私钥文件路径 PublicKeyPath = @"C:\Users\YourAccount\.ssh\id_rsa.pub" // 公钥文件路径,部分场景可省略 }; } }; // 执行克隆 Repository.Clone("git@github.com:your-username/your-repo.git", @"D:\local-repo-dir", cloneOptions);
已克隆仓库的拉取示例
using (var repo = new Repository(@"D:\local-repo-dir")) { var pullOptions = new PullOptions { FetchOptions = new FetchOptions { CredentialsProvider = (url, usernameFromUrl, types) => { return new SshUserKeyCredentials { Username = "git", Passphrase = "your-private-key-passphrase", PrivateKeyPath = @"C:\Users\YourAccount\.ssh\id_rsa" }; } } }; var committer = new Signature("Your Name", "your.email@example.com", DateTimeOffset.Now); repo.Network.Pull(committer, pullOptions); }
注意事项
- 确保程序对私钥文件有读取权限
- 若私钥未设置密码,
Passphrase可设为null或空字符串 - 部分Git服务(如GitHub)允许省略公钥路径,LibGit2Sharp会自动从私钥推导或查找对应公钥
内容的提问来源于stack exchange,提问作者BoomBoom
相关产品推荐
相关产品推荐

