I'm wondering how I can use jgit to connect to github using a specified ssh key file (i.e. one not in ~/.ssh/
).
Unfortunately, I'm not sure how to use JschConfigSessionFactory
properly. I've tried creating a setup just like the one in this article: Using Keys with JGit to Access a Git Repository Securely
I call git using git.push().setRemote(remotePath).call();
However, I get this error (specific repository omitted from log):
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
I've noticed that the custom overriden methods in JschConfigSessionFactory
aren't ever actually invoked. This is almost certainly the cause of the problem... but don't know why they're not invoked; I pass the custom JschConfigSessionFactory
to SshSessionFactory
using SshSessionFactory.setInstance(sessionFactory);
Does anybody know what I'm doing wrong?
To specify which private key should be used for connections to a particular remote host, use a text editor to create a ~/. ssh/config that includes the Host and IdentityFile keywords. Once you save the file, SSH will use the specified private key for future connections to that host.
In RStudio, go to menu Tools / Global options / Git SVN / View public key and copy the key to your Github account setting (Edit profile / SSH keys / Add SSH key).
GitHub uses password authentication for https URLs and public-key authentication for SSH URLs (see https://gist.github.com/grawity/4392747).
The SshSessionFactory
is only consulted for SSH URLs like [email protected]:user/repo.git. To authenticate for an https URL you can use the CredentialsProvider
. The base class for commands that may establish connections is TransportCommand
and has a setCredentialsProvider()
method.
If you equip the PushCommand
with a CredentialsProvider
that supplies user name and password, you should be able to successfully establish a connection.
For further details about authenticating with JGit you may want to read this article: http://www.codeaffine.com/2014/12/09/jgit-authentication/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With