c# - 在 C# 上使用 SSH 进行 NGit(JGit 端口)身份验证

标签 c# git ssh jgit ngit

我很想用 Ngit 在我的应用程序中设置 Git 功能。该存储库是在 BitBucket 上经过 SSH 身份验证的存储库,我无法对推送、 pull 、克隆等 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;
    }
}

传输配置回调:
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 key ,并且一切都可以与其他 GIT 工具一起使用。

在这一点上,我不知道可能出了什么问题,我会很感激任何正确方向的指示。

在带有 .Net 4.5.2 的 Visual Studio 2017 上使用 C#

编辑 1

更改代码,如答案 here产生相同的异常。

最佳答案

看来您的 SSH key 需要密码,在这种情况下,请使用

defaultJsch.AddIdentity( "<path>", "<passphrase>" )

关于c# - 在 C# 上使用 SSH 进行 NGit(JGit 端口)身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45060762/

相关文章:

git - 仅使用 git 将网站的更改部分部署到 ftp(git 的 svn2web)

r - 在 Windows 中使用 system() 将 git 命令发送到命令提示符时找不到 SSH key

python - 在没有 PuTTy/SSH 的情况下通过 Python 启动 Hadoop MapReduce 作业

c# - 将服务器中的公共(public)数据分发到全局传播的桌面应用程序的最佳方法

c# - 执行web服务方法并立即返回

git - 我应该如何设置我的 Git 存储库以便能够推送并且在两个地方仍然有一个工作目录?

python - 为 GitPython 中的 "git push"命令提供密码

java - 公钥或私钥作为连接远程数据库的密码,ssh

c# - 两个 gridviews 一个 RowDataBound

c# - NUnit 测试中属性的 MissingMethodException