为 JGit 指定 SSH 密钥

2022-09-03 02:21:22

我想知道如何使用jgit使用指定的ssh密钥文件(即不在中的一个)连接到github。~/.ssh/

不幸的是,我不确定如何正确使用。我尝试创建一个设置,就像本文中的设置:将密钥与JGit一起使用以安全地访问Git存储库JschConfigSessionFactory

我使用调用git但是,我得到这个错误(日志中省略了特定的存储库):git.push().setRemote(remotePath).call();

org.eclipse.jgit.api.errors.TransportException: https://github.com/user/repo: not authorized
    at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:160)
    at gitio.GitInterface.pushToRemote(GitInterface.java:145)
    at engine.GitInterfaceTester.main(GitInterfaceTester.java:25)
Caused by: org.eclipse.jgit.errors.TransportException: https://github.com/user/repo: not authorized
    at org.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:479)
    at org.eclipse.jgit.transport.TransportHttp.openPush(TransportHttp.java:396)
    at org.eclipse.jgit.transport.PushProcess.execute(PushProcess.java:154)
    at org.eclipse.jgit.transport.Transport.push(Transport.java:1173)
    at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:156)
    ... 2 more

我注意到,中的自定义重写方法实际上从未被调用过。这几乎可以肯定是问题的原因...但不知道为什么它们没有被调用;我把自定义传递给使用JschConfigSessionFactoryJschConfigSessionFactorySshSessionFactorySshSessionFactory.setInstance(sessionFactory);

有谁知道我做错了什么?


答案 1

GitHub 对 https URL 使用密码身份验证,对 SSH URL 使用公钥身份验证(请参阅 https://gist.github.com/grawity/4392747)。

仅针对 SSH URL(如 git@github.com:user/repo.git)咨询。要对 https URL 进行身份验证,可以使用 .可以建立连接的命令的基类是并且具有一个方法。如果 配备 提供用户名和密码的 ,则应该能够成功建立连接。SshSessionFactoryCredentialsProviderTransportCommandsetCredentialsProvider()PushCommandCredentialsProvider

有关使用 JGit 进行身份验证的更多详细信息,您可能需要阅读本文:http://www.codeaffine.com/2014/12/09/jgit-authentication/


答案 2

推荐