在 C# 上使用 SSH 进行 NGit(JGit 端口)身份验证
NGit (JGit port) authentication with SSH on C#
我正在使用 NGit 在我的应用程序中设置 Git 功能。该存储库是 BitBucket 上经过 SSH 身份验证的存储库,我无法对 Git 功能(如推送、拉取、克隆等)进行身份验证
我的代码如下:
JschConfigSessionFactory:
public class NSessionFactory : JschConfigSessionFactory
{
protected override void Configure(OpenSshConfig.Host hc, Session session)
{
session.SetConfig("StrictHostKeyChecking", "no");
}
protected override JSch CreateDefaultJSch(FS fs)
{
JSch defaultJSch = new JSch();
defaultJSch.SetKnownHosts(@"<path>\known_hosts");
defaultJSch.AddIdentity(@"<path>\id_rsa");
return defaultJSch;
}
}
TransportConfigCallback:
public class NTransportConfigCallBack : TransportConfigCallback
{
public void Configure(Transport transport)
{
SshTransport sshTransport = (SshTransport)transport;
sshTransport.SetSshSessionFactory(new NSessionFactory());
}
}
推送命令:
Git gitObj = NGit.Api.Git.Open(<path to git repo>);
PushCommand pshCmd = gitObj.Push();
pshCmd.SetRemote("ssh://git@stash.name.com:xxxx/repo.git");
pshCmd.SetTransportConfigCallback(new NTransportConfigCallBack());
pshCmd.Call();
以下 PushCommand.Call() 异常:
"TransportException: ssh://git@stash.name.com:xxxx/repo.git: Auth fail"
BitBucket 帐户已经设置了 SSH 密钥,一切都可以与其他 GIT 工具一起使用。
在这一点上,我不知道哪里出了问题,如果有任何正确方向的指示,我将不胜感激。
在 Visual Studio 2017 年使用 C# 和 .Net 4.5.2
编辑 1
更改答案中的代码 here 会产生相同的异常。
您的 SSH 密钥似乎需要密码,在这种情况下,请使用
defaultJsch.AddIdentity( "<path>", "<passphrase>" )
我正在使用 NGit 在我的应用程序中设置 Git 功能。该存储库是 BitBucket 上经过 SSH 身份验证的存储库,我无法对 Git 功能(如推送、拉取、克隆等)进行身份验证
我的代码如下:
JschConfigSessionFactory:
public class NSessionFactory : JschConfigSessionFactory
{
protected override void Configure(OpenSshConfig.Host hc, Session session)
{
session.SetConfig("StrictHostKeyChecking", "no");
}
protected override JSch CreateDefaultJSch(FS fs)
{
JSch defaultJSch = new JSch();
defaultJSch.SetKnownHosts(@"<path>\known_hosts");
defaultJSch.AddIdentity(@"<path>\id_rsa");
return defaultJSch;
}
}
TransportConfigCallback:
public class NTransportConfigCallBack : TransportConfigCallback
{
public void Configure(Transport transport)
{
SshTransport sshTransport = (SshTransport)transport;
sshTransport.SetSshSessionFactory(new NSessionFactory());
}
}
推送命令:
Git gitObj = NGit.Api.Git.Open(<path to git repo>);
PushCommand pshCmd = gitObj.Push();
pshCmd.SetRemote("ssh://git@stash.name.com:xxxx/repo.git");
pshCmd.SetTransportConfigCallback(new NTransportConfigCallBack());
pshCmd.Call();
以下 PushCommand.Call() 异常:
"TransportException: ssh://git@stash.name.com:xxxx/repo.git: Auth fail"
BitBucket 帐户已经设置了 SSH 密钥,一切都可以与其他 GIT 工具一起使用。
在这一点上,我不知道哪里出了问题,如果有任何正确方向的指示,我将不胜感激。
在 Visual Studio 2017 年使用 C# 和 .Net 4.5.2
编辑 1
更改答案中的代码 here 会产生相同的异常。
您的 SSH 密钥似乎需要密码,在这种情况下,请使用
defaultJsch.AddIdentity( "<path>", "<passphrase>" )