2014-05-16 5 views
6

Ich frage mich, wie ich JGIT verwenden kann, um eine Verbindung mit Github mit einer angegebenen SSH-Schlüsseldatei (d. H. Eine nicht in ~/.ssh /).Angeben von SSH-Schlüssel für JGIT

Leider bin ich nicht sicher, wie man JschConfigSessionFactory richtig verwendet. Ich habe versucht, in diesem Artikel ein Setup genau wie der Erstellung: Using Keys with JGit to Access a Git Repository Securely

ich git git.push().setRemote(remotePath).call(); jedoch mit rufen, ich bekomme diese Fehlermeldung (spezifische Repository von log weggelassen):

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 

Ich habe bemerkt, dass die benutzerdefinierten überschriebenen Methoden in JschConfigSessionFactory nicht tatsächlich tatsächlich aufgerufen werden. Das ist mit ziemlicher Sicherheit die Ursache des Problems ... aber ich weiß nicht, warum sie nicht aufgerufen werden; Ich übergebe die Gewohnheit JschConfigSessionFactory zu unter Verwendung SshSessionFactory.setInstance(sessionFactory);

Weiß jemand, was ich falsch mache?

+0

Ist dieses Beispiel helfen? https://gist.github.com/quidryan/5449155 – VonC

Antwort

2

GitHub verwendet die Kennwortauthentifizierung für https-URLs und die Authentifizierung mit öffentlichen Schlüsseln für SSH-URLs (siehe https://gist.github.com/grawity/4392747). Die SshSessionFactory wird nur für SSH-URLs wie [email protected] verwendet: user/repo.git. Um sich für eine https-URL zu authentifizieren, können Sie die CredentialsProvider verwenden. Die Basisklasse für Befehle, die Verbindungen herstellen können, ist TransportCommand und hat eine setCredentialsProvider() Methode. Wenn Sie den PushCommand mit einem CredentialsProvider ausstatten, der den Benutzernamen und das Kennwort bereitstellt, sollten Sie in der Lage sein, eine Verbindung erfolgreich herzustellen.

Für weitere Informationen über die Authentifizierung mit JGit Sie diesen Artikel lesen möchten: http://www.codeaffine.com/2014/12/09/jgit-authentication/

+1

Ahh, ich verstehe; Ich habe den falschen URL-Stil verwendet. [email protected]: user/repo.git hat funktioniert. Vielen Dank! – nstbayless