Как вы устанавливаете конфигурацию для jschconfigsessionfactory для jgit, чтобы тянуть и толкать работу?
Я пытаюсь сделать git pull / push с помощью api Jgit со следующим кодом
org.eclipse.jgit.api.Git.open(theRepoFile).pull().call()
, но я получаю исключения
JSchException Auth fail
com.jcraft.jsch.Session.connect (Session.java:461)
org.eclipse.jgit.transport.JschConfigSessionFactory.getSession (JschConfigSessionFactory.java:116)
org.eclipse.jgit.transport.SshTransport.getSession (SshTransport.java:121)
org.eclipse.jgit.transport.TransportGitSsh$SshPushConnection.<init> (TransportGitSsh.java:306)
org.eclipse.jgit.transport.TransportGitSsh.openPush (TransportGitSsh.java:152)
org.eclipse.jgit.transport.PushProcess.execute (PushProcess.java:130)
org.eclipse.jgit.transport.Transport.push (Transport.java:1127)
org.eclipse.jgit.api.PushCommand.call (PushCommand.java:153)
хотя использование cgit pull и pushing работает.
Я попытался проверить так, например, код
но приведенный выше вопрос не дает полного закодированного примера того, что необходимо сделать git pull с удаленным РЕПО, которое обычно аутентификация через ssh ключи. Должен быть способ получить информацию о учетных данных от ~/.ssh/
или эквивалент windows.
3 ответов
Jsch автоматически обнаружит ваши SSH-ключи, но потерпит неудачу, если они защищены паролем. Вам нужно указать парольную фразу через CredentialsProvider следующим образом:
JschConfigSessionFactory sessionFactory = new JschConfigSessionFactory() {
@Override
protected void configure(OpenSshConfig.Host hc, Session session) {
CredentialsProvider provider = new CredentialsProvider() {
@Override
public boolean isInteractive() {
return false;
}
@Override
public boolean supports(CredentialItem... items) {
return true;
}
@Override
public boolean get(URIish uri, CredentialItem... items) throws UnsupportedCredentialItem {
for (CredentialItem item : items) {
((CredentialItem.StringType) item).setValue("yourpassphrase");
}
return true;
}
};
UserInfo userInfo = new CredentialsProviderUserInfo(session, provider);
session.setUserInfo(userInfo);
}
};
SshSessionFactory.setInstance(sessionFactory);
проблема Jsch не поддерживает ssh-agent
s из коробки. Нужно будет настроить https://github.com/ymnk/jsch-agent-proxy чтобы заставить его работать.
альтернативой является сделать свой собственный org.eclipse.jgit.transport.CredentialsProvider
и выберите org.eclipse.jgit.transport.CredentialItem
к правильным значениям (запрашивая их у пользователя или просматривая файл). Вы можете изменить значение по умолчанию CredentialsProvider
С org.eclipse.jgit.transport.CredentialsProvider/setDefault
Подробнее см. В моей библиотеке Clojure dj: https://github.com/bmillare/dj/blob/library/src/dj/git.clj
Я смутно помню, что получил ошибку с JSch, которая заблокировала меня на некоторое время, потому что журнал не был очень явным. Я не могу сказать наверняка, что это та же проблема, но я последовал этой странице, чтобы решить свою проблему:
https://help.github.com/articles/generating-ssh-keys
(именно из-за неправильной конфигурации сети)