Using Keys with JGit to Access a Git Repository Securely

后端 未结 3 1326
無奈伤痛
無奈伤痛 2020-12-05 07:54

I\'m using JGit to access a remote Git repo, and I need to use SSH for it. JGit uses JSch to provide secure access. However, I\'m not sure how to set the key file and the kn

3条回答
  •  渐次进展
    2020-12-05 08:37

    You need to override the getJSch method in your custom factory class:

    class CustomConfigSessionFactory extends JschConfigSessionFactory
    {
        @Override
        protected JSch getJSch(final OpenSshConfig.Host hc, FS fs) throws JSchException {
            JSch jsch = super.getJSch(hc, fs);
            jsch.removeAllIdentity();
            jsch.addIdentity( "/path/to/private/key" );
            return jsch;
        }
    }
    

    Calling jsch.removeAllIdentity is important; it doesn't seem to work without it.

    A caveat: I wrote the above in Scala, and then translated it over to Java, so it might not be quite right. The original Scala is as follows:

    class CustomConfigSessionFactory extends JschConfigSessionFactory
    {
        override protected def getJSch( hc : OpenSshConfig.Host, fs : FS ) : JSch =
        {
            val jsch = super.getJSch(hc, fs)
            jsch.removeAllIdentity()
            jsch.addIdentity( "/path/to/private/key" )
            jsch
        }
    }
    

提交回复
热议问题