代码之家  ›  专栏  ›  技术社区  ›  PhoenixDev

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

  •  1
  • PhoenixDev  · 技术社区  · 8 年前

    我正在用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"
    

    在这一点上,我不知道会出什么问题,我希望有人能给我指出正确的方向。

    编辑1

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   Rüdiger Herrmann    8 年前

    您的SSH密钥似乎需要密码短语,在本例中,请使用

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