使用libgit2sharp-SSH中的SshUserKeyCredentials进行身份验证时遇到问题

Kim*_*ist 6 c# libssh2 libgit2sharp libgit2sharp-ssh

使用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);
Run Code Online (Sandbox Code Playgroud)

我发现SshUserKeyCredentials对象浏览源代码,所以我的第一个问题是,是否可以使用此对象从gitlab部署基于密钥的签出?

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

我最终得到的错误:

{"Failed to start SSH session: Unable to exchange encryption keys"}
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*sen 0

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

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

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

  3. 私钥必须采用 PEM 格式(使用 PuttyGen Conversion 菜单 => Export 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"
                    }
Run Code Online (Sandbox Code Playgroud)

另请参阅: PHP ssh2_auth_pubkey_file():使用公钥身份验证失败:无效的密钥数据,未进行 Base64 编码

  • 我在代码到达 CredentialsHandler 之前就收到错误,因此我没有机会指定任何这些值。 (3认同)