在 libgit2sharp-SSH 中使用 SshUserKeyCredentials 进行身份验证时出现问题

问题描述 投票:0回答:2

使用 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 进行基于部署密钥的签出?

该对象似乎需要私钥、用户名、公钥和密码的任意组合。我目前正在使用私钥。

我最终遇到的错误:

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

如果这种方式不起作用,是否有其他方法可以使用部署密钥从 C# 环境以编程方式管理 git?

c# libgit2sharp libssh2 libgit2sharp-ssh
2个回答
0
投票

我通过反复试验和搜索网络得出了以下结论。

  1. 任何字段都不能有

    null
    ;使用
    string.Empty

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

  4. 私钥必须采用 PEM 格式(使用 PuttyGen Conversion 菜单 => 导出 OpenSSH 或使用

    openssl rsa -in id_rsa -out id_rsa.pem
    )。

  5. 公钥必须是单行,以 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():使用公钥身份验证失败:密钥数据无效,未进行 Base64 编码


0
投票

有人解决过这个问题吗?

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.