Verwenden von Schlüsseln mit JGit, um sicher auf ein Git-Repository zuzugreifen

Ich benutzeJGit um auf ein fernes Git-Repo zuzugreifen, muss ich verwendenSSH dafür. JGit verwendetJSch um einen sicheren Zugang zu gewährleisten. Ich bin mir jedoch nicht sicher, wie ich die Schlüsseldatei und die Datei mit den bekannten Hosts für JGit festlegen soll. Was ich versucht habe, ist wie folgt.

Erstellt eine benutzerdefinierte Konfiguration derSshSessionFactoryunter Verwendung von UnterklassenJSchConfigSessionFactory:

public class CustomJschConfigSessionFactory extends JschConfigSessionFactory {
    @Override
    protected void configure(OpenSshConfig.Host host, Session session) {
        session.setConfig("StrictHostKeyChecking", "yes");
    }
}

In der Klasse, in der ich auf das entfernte Git-Repo zugreife, habe ich Folgendes getan:

CustomJschConfigSessionFactory jschConfigSessionFactory = new CustomJschConfigSessionFactory();

JSch jsch = new JSch();
try {
    jsch.addIdentity(".ssh/id_rsa");
    jsch.setKnownHosts(".ssh/known_hosts");
} catch (JSchException e) {
    e.printStackTrace();  
}
    SshSessionFactory.setInstance(jschConfigSessionFactory);

Ich kann nicht herausfinden, wie dieses JSch-Objekt mit JGit verknüpft wird, damit eine Verbindung zum Remote-Repository hergestellt werden kann. Wenn ich versuche, es mit JGit zu klonen, erhalte ich die folgende Ausnahme:

org.eclipse.jgit.api.errors.TransportException: [email protected]:abc.org/test_repo.git: reject HostKey: git.test.com
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:137)
at org.eclipse.jgit.api.CloneCommand.fetch(CloneCommand.java:178)
at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:125)
at GitTest.cloneRepo(GitTest.java:109)
at GitTest.main(GitTest.java:223)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: org.eclipse.jgit.errors.TransportException: [email protected]:abc.org/test_repo.git: reject HostKey: git.test.com
at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:142)
at org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:121)
at org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.<init>(TransportGitSsh.java:248)
at org.eclipse.jgit.transport.TransportGitSsh.openFetch(TransportGitSsh.java:147)
at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:136)
at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:122)
at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1104)
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:128)
... 9 more
Caused by: com.jcraft.jsch.JSchException: reject HostKey: git.test.com
at com.jcraft.jsch.Session.checkHost(Session.java:748)
at com.jcraft.jsch.Session.connect(Session.java:321)
at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:116)
... 16 more

Ich habe den Eintrag git.test.com zu meinem hinzugefügt/etc/hosts Datei. Ich habe den gleichen Code verwendet, um auf ein Git-Repo mit einer http-URL zuzugreifen, sodass der Code einwandfrei funktioniert. Es ist der Schlüsselteil, der versagt. Irgendeine Idee, wie man damit umgeht?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage