安全访问GitHub时出现UnknownHostKey异常

时间:2012-11-15 11:24:59

标签: java ssl github jgit

我正在使用jgit安全地访问GitHub中的存储库。我做了以下操作来生成GitHub和我的客户端代码之间的安全通信密钥。

  1. 生成密钥对:

    ssh-keygen -t rsa
    
  2. 使用帐户设置 - >为GitHub帐户添加了公钥。 SSH密钥 - >添加SSH密钥

  3. 将步骤1中生成的私钥添加到本地主机:

    ssh-add id_rsa
    
  4. 执行此操作后,当我尝试访问GitHub并进行克隆时,我仍然会收到以下错误:

    org.eclipse.jgit.api.errors.TransportException: git@github.com:test/test_repo.git: UnknownHostKey: github.com. RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
    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)
    

    这是我使用的代码:

        String localPath, remotePath;
        Repository localRepo;
        Git git;
    
        localPath = <path_to_local_repository>;
        remotePath = "git@github.com:test/test_repo.git";
    
        try {
            localRepo = new FileRepository(localPath + "/.git");
        } catch (IOException e) {
            e.printStackTrace();
        }
        git = new Git(localRepo);
    
        CloneCommand cloneCmd =  git.cloneRepository().
                    setURI(remotePath).
                    setDirectory(new File(localPath));
            try {
                cloneCmd.call();
            } catch (GitAPIException e) {
                log.error("git clone operation failed");
                e.printStackTrace();
            }
    

    请告诉我这里的问题,我该怎么做才能纠正它。

    感谢。

2 个答案:

答案 0 :(得分:16)

之所以发生这种情况是因为~/.ssh/known_hosts中没有github的条目,而jgit中使用的JSch默认拒绝会话。有关解决方案,请参阅此问题:com.jcraft.jsch.JSchException: UnknownHostKey

要设置ssh会话属性,您需要为jgit:

创建会话工厂
SshSessionFactory.setInstance(new JschConfigSessionFactory() {
  public void configure(Host hc, Session session) {
    session.setConfig("StrictHostKeyChecking", "no");
  }
})

或将StrictHostKeyChecking=no添加到~/.ssh/config

答案 1 :(得分:2)

因为该线程是第一个结果:

com.jcraft.jsch.JSchException:UnknownHostKey:gitservername。 RSA密钥 指纹”

,如果问题仍然存在,唯一的答案是禁用 StrictHostKeyChecking ,出于安全目的,这是不可接受的。

如果问题仍然存在,则应从另一个线程查看此答案:

https://stackoverflow.com/a/44777270/13184312

解决持久性问题的方法是:

ssh-keyscan -H -t rsa gitservername >> ~/.ssh/known_hosts