NGit making a connection with a private key file

后端 未结 1 1069
陌清茗
陌清茗 2021-01-06 02:09

I am trying to use NGit to connect to Github (ie using a private key as well as a password).

Can someone walk me through it?

My normal fetch would be:

<
相关标签:
1条回答
  • 2021-01-06 02:58

    After a long battle, many many google searches for Jgit examples and much more pain, I have found the solution!

    Basically you override and SessionFactory with your own and inject your certificate at connection time:

    public class CustomConfigSessionFactory : JschConfigSessionFactory
    {
        public string PrivateKey { get; set; }
        public string PublicKey { get; set; }
    
        protected override void Configure(OpenSshConfig.Host hc, Session session)
        {
            var config = new Properties();
            config["StrictHostKeyChecking"] = "no";
            config["PreferredAuthentications"] = "publickey";
            session.SetConfig(config);
    
            var jsch = this.GetJSch(hc, FS.DETECTED);
            jsch.AddIdentity("KeyPair", Encoding.UTF8.GetBytes(PrivateKey), Encoding.UTF8.GetBytes(PublicKey), null);
        }
    }
    

    And then inject it like so:

    var customConfigSessionFactory = new CustomConfigSessionFactory();
    customConfigSessionFactory.PrivateKey = properties.PrivateKey;
    customConfigSessionFactory.PublicKey = properties.PublicKey;
    
    NGit.Transport.JschConfigSessionFactory.SetInstance(customConfigSessionFactory);
    
    var git = Git.CloneRepository()
              .SetDirectory(properties.OutputPath)
              .SetURI(properties.SourceUrlPath)
              .SetBranchesToClone(new Collection<string>() { "master" })
              .Call();
    
    0 讨论(0)
提交回复
热议问题