7

使用 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 部署基于密钥的结帐?

该对象似乎需要 PrivateKey、Username、PublicKey 和 Passphrase 的任意组合。我目前正在使用 PrivateKey。

我最终得到的错误:

{"Failed to start SSH session: Unable to exchange encryption keys"}

如果这种方式不应该工作,是否有另一种使用部署密钥以编程方式从 C# 环境管理 git 的方法?

4

1 回答 1

0

通过反复试验和搜索网络,我能够弄清楚以下内容。

  1. 你不能拥有null任何领域;使用string.Empty.

  2. 必须以正确的格式提供公钥私钥。

  3. 私钥必须采用 PEM 格式(使用 PuttyGen 转换菜单 => 导出 OpenSSH 或使用openssl rsa -in id_rsa -out id_rsa.pem)。

  4. 公钥必须是单行,以 type 开头,后跟 base64 密钥,最后没有注释(这是 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"
                    }

另请参阅: PHP ssh2_auth_pubkey_file(): Authentication failed using public key: Invalid key data, not base64 encoding

于 2017-05-24T13:20:36.407 回答