将密钥与JGit结合使用以安全地访问Git存储库

我正在使用JGit访问远程Git存储库,并且需要使用SSH。JGit使用JSch提供安全访问。但是,我不确定如何为JGit设置密钥文件和已知主机文件。我尝试过如下。

通过子类化JSchConfigSessionFactory创建了SshSessionFactory的自定义配置:

public class CustomJschConfigSessionFactory extends JschConfigSessionFactory {

@Override

protected void configure(OpenSshConfig.Host host, Session session) {

session.setConfig("StrictHostKeyChecking", "yes");

}

}

在我访问远程Git存储库的课程中,执行了以下操作:

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);

我不知道如何将此JSch对象与JGit关联,以便它可以成功连接到远程存储库。当我尝试使用JGit克隆它时,出现以下异常:

org.eclipse.jgit.api.errors.TransportException: git@git.test.com: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: git@git.test.com: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

我已将git.test.com条目添加到我的/etc/hosts文件中。我使用相同的代码来访问带有http url的git

repo,因此该代码可以正常工作。这是失败的关键处理部分。关于如何处理这个想法?

回答:

设法找到问题。服务器端的公钥不同于通常的id_rsa.pub,而我这边的私钥是id_rsa。JSch默认情况下期望公钥与私钥加.pub后缀具有相同的名称。使用具有通用名称的密钥对(例如:private

= key_1和public = key_1.pub)可以解决此问题。

以上是 将密钥与JGit结合使用以安全地访问Git存储库 的全部内容, 来源链接: utcz.com/qa/428009.html

回到顶部