在 libgit2sharp-SSH 中使用 SshUserKeyCredentials 进行身份验证时遇到问题
Trouble authenticating with SshUserKeyCredentials in 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);
我在浏览源代码时发现了 SshUserKeyCredentials 对象,所以我的第一个问题是是否可以使用此对象从 gitlab 进行基于部署密钥的签出?
该对象似乎需要 PrivateKey、Username、PublicKey 和 Passphrase 的任意组合。我目前正在使用私钥。
我最终遇到的错误:
{"Failed to start SSH session: Unable to exchange encryption keys"}
如果这种方式不可行,是否有其他方法可以使用部署密钥从 C# 环境以编程方式管理 git?
通过反复试验和搜索网络,我能够弄清楚以下内容。
任何字段都不能有null
;使用 string.Empty
。
Public and必须提供私钥和格式正确。
私钥必须为 PEM 格式(使用 PuttyGen 转换菜单 => 导出 OpenSSH 或使用 openssl rsa -in id_rsa -out id_rsa.pem
)。
Public key 必须是单行,以type开头,然后是base64 key,最后没有注释(这是public 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"
}
另请参阅:
PHP ssh2_auth_pubkey_file(): Authentication failed using public key: Invalid key data, not base64 encoded
使用 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 的任意组合。我目前正在使用私钥。
我最终遇到的错误:
{"Failed to start SSH session: Unable to exchange encryption keys"}
如果这种方式不可行,是否有其他方法可以使用部署密钥从 C# 环境以编程方式管理 git?
通过反复试验和搜索网络,我能够弄清楚以下内容。
任何字段都不能有
null
;使用string.Empty
。Public and必须提供私钥和格式正确。
私钥必须为 PEM 格式(使用 PuttyGen 转换菜单 => 导出 OpenSSH 或使用
openssl rsa -in id_rsa -out id_rsa.pem
)。Public key 必须是单行,以type开头,然后是base64 key,最后没有注释(这是public 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"
}
另请参阅: PHP ssh2_auth_pubkey_file(): Authentication failed using public key: Invalid key data, not base64 encoded