- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
使用 libgit2sharp-SSH 对 SshUserKeyCredentials 进行身份验证时遇到一些问题:
var co = new CloneOptions();
co.CredentialsProvider = (_url, _user, _cred) => new SshUserKeyCredentials { PrivateKey="C:\\path\\to\\private_key" };
Repository.Clone("git@... .repository.git", path, co);
我在浏览源代码时发现了 SshUserKeyCredentials 对象,所以我的第一个问题是是否可以使用该对象从 gitlab 部署基于 key 的 checkout ?
该对象似乎需要 PrivateKey、Username、PublicKey 和 Passphrase 的任意组合。我目前正在使用私钥。
我最终遇到的错误:
{"Failed to start SSH session: Unable to exchange encryption keys"}
如果这种方式不可行,是否有其他方法可以使用部署 key 从 C# 环境以编程方式管理 git?
最佳答案
通过反复试验和搜索网络,我能够弄清楚以下内容。
任何字段都不能为null
;使用 string.Empty
。
公钥和必须以正确的格式提供和。
私钥必须采用 PEM 格式(使用 PuttyGen 转换菜单 => 导出 OpenSSH 或使用 openssl rsa -in id_rsa -out id_rsa.pem
)。
公钥必须是单行,以类型开头,然后是 base64 key ,最后没有注释(这是 PuttyGen 上公钥文本框中显示的格式,除了您必须删除注释), 例如
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAoblahblahblahblahblah
我添加了用户名 git
因为这是 Bitbucket 的要求。不确定您是否需要它,但它不能为 null
,执行 string.Empty
。
例子:
CredentialsHandler handler = (_url, _user, _cred) => new SshUserKeyCredentials
{
PrivateKey = @"C:\Users\blah\.ssh\keys\bitbucket.pem",
Username = "git",
Passphrase = string.Empty,
PublicKey = @"C:\Users\blah\.ssh\keys\bitbucket.pub"
}
关于c# - 在 libgit2sharp-SSH 中使用 SshUserKeyCredentials 进行身份验证时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41362607/
我需要遍历存储库的提交并为每次提交获取受影响的文件。这是我目前巨大的性能瓶颈。 我有一个 libgit 函数的 C++ 包装器,但这段代码应该足够容易理解。 std::vector Commit::g
我正在使用 libgit2(在 C++ 中)创建一个 git 存储库和一个提交。它工作正常,但是, checkout 会破坏所有本地文件。 但是它们似乎仍然存在于 repo 中。这就是我尝试查看存储库
我是一名优秀的程序员,十分优秀!