尝试使用 SSH 将克隆存储库(托管在GOGS中)的示例项目放在一起,但出现以下错误:
Failed to start SSH session: Unable to exchange encryption keys
我在 Windows 上,密钥是使用 ssh-keygen 生成的,并且我引用了以下 nuget 包
- LibGit2Sharp 0.25.3
- LibGit2Sharp.NativeBinaries 1.0.235
- LibGit2Sharp-SSH 1.0.22
- LibGit2Sharp-SSH.NativeBinaries 1.0.14
我们可以使用如下代码从测试位存储桶帐户中提取文件,但不能从 GOGS 存储库 url 中提取文件(相同的密钥已上传到两个帐户)。
var co = new CloneOptions
{
CredentialsProvider = (_url, _user, _cred) => new SshUserKeyCredentials()
{
PrivateKey = @"C:\Users\username\.ssh\keygen\gen",
PublicKey = @"C:\Users\username\.ssh\keygen\gen.pub",
Passphrase = string.Empty,
Username = "git"
},
};
Repository.Clone("ssh://git@<site_url>:443/Project/Project.git ", TestPath, co);
我还要补充一点,我们可以使用各种 git 客户端(git exe、tortoise git、gitkraken)从两个 url 克隆而不会出现问题。我们也可以使用 LibGit2Sharp 通过 https 连接用户名和密码。
到目前为止我尝试过的事情:
- 使用 ssh-keygen 生成新密钥
- 使用 puttygen > Conversions > Export OpenSSH 将私钥文件转换为 openssh
- 使用“openssl rsa -in key-out key.pem”将私钥转换为 PEM 格式
- 确保公钥是单行的,以type开头,后跟base64 key,最后没有注释